【问题标题】:BenchmarkDotNet - How to inject parameters outside from the classBenchmarkDotNet - 如何在类之外注入参数
【发布时间】:2020-02-27 01:50:08
【问题描述】:

我正在使用BenchmarkDotNet 库进行性能检查,我想注入 使用基准类时的参数。像这样的:

public class Program
{
    public static void Main()
    {
        var benchmark1 = new BenchmarkWithParameter(100);
        BenchmarkRunner.Run(benchmark1);

        var benchmark2 = new BenchmarkWithParameter(200);
        BenchmarkRunner.Run(benchmark2);
    }
}

public class BenchmarkWithParameter
{
    public BenchmarkWithParameter(int waitTime)
    {
        WaitTime = waitTime;
    }

    public int WaitTime { get; }

    [Benchmark]
    public void Run()
    {
        Thread.Sleep(WaitTime);
    }
}

有办法实现吗?

我知道我可以使用ParamsParamsSourceArgumentsSource属性,但这意味着我需要为每个参数更改更改基准类,而不是注入不同的参数。

我的主要目标是编写一次基准类,并使用不同的参数多次使用它。

【问题讨论】:

  • 不是很优雅,但目前我将参数写入文本文件,然后在GlobalSetup 中读取它们,我需要它们来实例化一个类。在我的例子中,参数是在命令行中指定的。

标签: c# benchmarkdotnet


【解决方案1】:

很抱歉,但从今天开始,这是不可能的。

库的设计受到以下事实的限制:为了避免先前执行的基准测试的副作用,我们在独立进程中运行每个基准测试。为了能够做到这一点,我们为每个基准测试生成并编译一个新项目。编译限制了我们提供参数/参数的已知方式。

此处描述了所有可用选项:https://benchmarkdotnet.org/articles/features/parameterization.html

【讨论】:

  • 如何使用setter更改参数here?考虑到 runner 只能在 BenchmarkRunner.Run<MyTest>(); 这样的类型上运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
相关资源
最近更新 更多