BenchmarkDotNet-可变参数

之前的字符串判空测试中, 循环次数为固定的100次, 如果我想要测试1000次或者10000次, 就必须修改代码然后重新运行项目, 这样的操作是非常不方便的

因此可以标记运行中所使用的参数, 提前进行配置

[SimpleJob(RuntimeMoniker.Net70)]
[SimpleJob(RuntimeMoniker.Net60, baseline: true)]
public class Test
{
    [Params(1, 100, 10000)]
    public int Count;
    [Benchmark(Baseline = true)]
    public void TestEmpty()
    {
        for (var i = 0; i < Count; i++)
            string.IsNullOrEmpty("");
    }
    [Benchmark]
    public void TestWhiteSpace()
    {
        for (var i = 0; i < Count; i++)
            string.IsNullOrWhiteSpace("");
    }
}

只需要将[Params]特性加到 Count 属性上, 然后传入需要循环的次数即可

但是需要注意的是, 传入的参数越多, 测试所需的时间越长

Method Runtime Count Mean Error StdDev Median Ratio RatioSD
TestEmpty .NET 6.0 1 0.0714 ns 0.1231 ns 0.0814 ns 0.0349 ns 1.00 0.00
TestWhiteSpace .NET 6.0 1 1.9495 ns 0.0927 ns 0.0485 ns 1.9450 ns 67.38 59.38
TestEmpty .NET 7.0 1 0.0153 ns 0.0305 ns 0.0181 ns 0.0069 ns 1.71 3.61
TestWhiteSpace .NET 7.0 1 0.0112 ns 0.0147 ns 0.0098 ns 0.0084 ns 1.71 4.43
TestEmpty .NET 6.0 100 29.3640 ns 0.4495 ns 0.2351 ns 29.3970 ns 1.00 0.00
TestWhiteSpace .NET 6.0 100 228.6230 ns 2.2380 ns 1.3318 ns 228.1453 ns 7.78 0.08
TestEmpty .NET 7.0 100 28.8075 ns 0.1864 ns 0.1233 ns 28.8345 ns 0.98 0.01
TestWhiteSpace .NET 7.0 100 28.7252 ns 0.3800 ns 0.2261 ns 28.6167 ns 0.98 0.01
TestEmpty .NET 6.0 10000 2,397.6138 ns 41.6010 ns 24.7561 ns 2,394.6654 ns 1.00 0.00
TestWhiteSpace .NET 6.0 10000 22,039.1218 ns 278.0161 ns 165.4429 ns 21,982.1578 ns 9.19 0.13
TestEmpty .NET 7.0 10000 2,422.1938 ns 87.4866 ns 57.8670 ns 2,412.8422 ns 1.01 0.03
TestWhiteSpace .NET 7.0 10000 2,387.8995 ns 32.0373 ns 21.1907 ns 2,381.0133 ns 0.99 0.01
posted @ 2023-10-09 17:26  崩坏的领航员  阅读(25)  评论(0编辑  收藏  举报