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 | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号