BenchmarkDotNet - 如何从 class 外部注入参数
BenchmarkDotNet - How to inject parameters outside from the class
我正在使用 BenchmarkDotNet 库进行性能检查,我想注入
使用基准时的参数 class。像这样:
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);
}
}
有没有办法实现?
我知道我可以使用 Params
、ParamsSource
和 ArgumentsSource
属性,但这意味着我需要为每个参数更改更改基准 class注入不同的参数。
我的主要目标是编写一次基准测试 class 并使用不同的参数多次使用它。
很抱歉,从今天开始,这是不可能的。
库的设计受到以下事实的限制,即为了避免先前执行的基准测试的副作用,我们 运行 每个基准测试都在一个独立的过程中。为了能够做到这一点,我们为每个基准生成并编译一个新项目。编译将我们限制为提供 parameters/arguments.
的已知方式
此处描述了所有可用选项:https://benchmarkdotnet.org/articles/features/parameterization.html
我正在使用 BenchmarkDotNet 库进行性能检查,我想注入 使用基准时的参数 class。像这样:
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);
}
}
有没有办法实现?
我知道我可以使用 Params
、ParamsSource
和 ArgumentsSource
属性,但这意味着我需要为每个参数更改更改基准 class注入不同的参数。
我的主要目标是编写一次基准测试 class 并使用不同的参数多次使用它。
很抱歉,从今天开始,这是不可能的。
库的设计受到以下事实的限制,即为了避免先前执行的基准测试的副作用,我们 运行 每个基准测试都在一个独立的过程中。为了能够做到这一点,我们为每个基准生成并编译一个新项目。编译将我们限制为提供 parameters/arguments.
的已知方式此处描述了所有可用选项:https://benchmarkdotnet.org/articles/features/parameterization.html