c# - BenchmarkDotNet - 如何在类之外注入(inject)参数

标签 c# benchmarkdotnet

我正在使用 BenchmarkDotNet用于性能检查的库,我想注入(inject)
使用基准类时的参数。像这样的东西:

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

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

最佳答案

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

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

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

关于c# - BenchmarkDotNet - 如何在类之外注入(inject)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58647804/

相关文章:

c# - 在 C# 中反序列化动态命名的 JSON 对象(使用 JSON.Net 或其他方式)

c# - 使用 Azure AD 时处理 Asp.Net MVC 中的 token 超时

memory-leaks - DI 容器泄漏内存或 BenchmarksDotNet MemoryDiagnoser 提供不准确的测量?

c# - 仅显示 BenchmarkDotNet 的摘要部分

c# - 如何从外部代码开始对 .Net 类进行基准测试

c# - '无法将 MySQL 日期/时间值转换为 System.DateTime' 当不使用日期时 - C#.Net

C# 图像.FromStream() : Lost metadata when running in Windows 8/10

c# - 正则表达式匹配 C# 中的路径

c# - 在 ASP.net MVC 中使用 benchmarkdotnet 获取性能结果

c# - C# for 循环和 Array.Fill 之间的性能差异