2017-08-28 60 views
1

我打算使用BenchmarkDotNet来测试各种项目中的一些方法。如何基准.Net类从外部代码开始

因为它可能就像将Benchmark属性添加到方法一样简单,所以我在使用它的项目中有相当大的疑问。

该项目由两个部分组成:

  • 天然芯
  • .NET功能

天然部分初始化的.Net部分并调用它的方法通过互操作

因此,使用测试项目并添加对.Net项目的引用并启动基准测试应用程序将不起作用,因为本机代码应该先启动。

任何想法,如果我能以某种方式跳过本地部分,并使BenchmarkDotNet只测试的方法?或者我应该寻找另一个基准测试方法?

回答

0

看着BenchmarkDotNet的规范,似乎你可以标记任何方法作为基准,它不一定是你的本地应用程序调用的实际方法。 与单元测试类似,您可以编写基准,用您的.NET代码中的方法调用具有本地核心的有效参数。

我会建议创建一个单独的Benchmark项目,类似于你将有一个单独的测试项目。

+0

它是衡量interopcode的有效使用和.Net的初始化开销是至关重要的,所以我不能创建一个模拟本地部分.Net项目。这就是为什么我打算让BenchmarkDotNet跳过本机部分,并开始测量.Net部分开始时的情况。 – Nestor

1
  • 创建一个新的公共类
  • 创建基准方法,调用您想要测量的东西。用[Benchmark]属性标记它。

如果它足以一旦运行初始化代码(许多基准迭代):

  • 创建一个新的方法,执行初始化,并与[GlobalSetup]属性标记它
  • BenchmarkDotNet将创建一个新类的实例,一次调用setup方法,然后开始对代码进行基准测试。

如果它是不够的,一旦运行初始化和它需要被称为每次基准测试前的方法调用:

  • 创建一个新的方法,执行初始化,并与[IterationSetup]属性标记它。将运行策略设置为RunStrategy.Monitoring
  • BenchmarkDotNet将创建您的类的新实例,在调用基准并重复执行多次之前调用一次setup方法。

你可以阅读更多关于设置和清理我们official docs

+0

不幸的是,我无法正确设置没有本地部分的初始化,因为它处理授权,参数init等等。所以我应该只使用这些属性,当.Net代码启动时,它应该记录性能。我想知道是否有可能使用BenchmarkDotNet。 – Nestor

+0

@感谢不幸的是,这是不可能的。你需要一个分析器来衡量它。 –