BenchmarkDotNet - 如何在类外注入参数

8
我正在使用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属性,但这意味着我需要为每个参数更改更改基准类,而不是注入不同的参数。

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


1
目前虽然不太优雅,但是我将参数写入文本文件中,并在我需要实例化类的 GlobalSetup 中读取它们。在我的情况下,这些参数是在命令行上指定的。 - dashesy
1个回答

9
很抱歉,截至今天,这是不可能的。
由于为了避免之前执行基准测试的副作用,库的设计受到限制,我们在单独的进程中运行每个基准测试。为了能够做到这一点,我们会为每个基准测试生成和编译一个新项目。这种编译方式限制了我们提供参数/参数的已知方式。
所有可用选项均在此处描述:https://benchmarkdotnet.org/articles/features/parameterization.html

如何使用 setter 更改此处的参数 这里?考虑到 runner 只能在类似 BenchmarkRunner.Run<MyTest>(); 的类型上运行。 - dashesy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接