跳到主要内容

可变参数

之前的字符串判空测试中, 循环次数为固定的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 属性上, 然后传入需要循环的次数即可

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

MethodRuntimeCountMeanErrorStdDevMedianRatioRatioSD
TestEmpty.NET 6.010.0714 ns0.1231 ns0.0814 ns0.0349 ns1.000.00
TestWhiteSpace.NET 6.011.9495 ns0.0927 ns0.0485 ns1.9450 ns67.3859.38
TestEmpty.NET 7.010.0153 ns0.0305 ns0.0181 ns0.0069 ns1.713.61
TestWhiteSpace.NET 7.010.0112 ns0.0147 ns0.0098 ns0.0084 ns1.714.43
TestEmpty.NET 6.010029.3640 ns0.4495 ns0.2351 ns29.3970 ns1.000.00
TestWhiteSpace.NET 6.0100228.6230 ns2.2380 ns1.3318 ns228.1453 ns7.780.08
TestEmpty.NET 7.010028.8075 ns0.1864 ns0.1233 ns28.8345 ns0.980.01
TestWhiteSpace.NET 7.010028.7252 ns0.3800 ns0.2261 ns28.6167 ns0.980.01
TestEmpty.NET 6.0100002,397.6138 ns41.6010 ns24.7561 ns2,394.6654 ns1.000.00
TestWhiteSpace.NET 6.01000022,039.1218 ns278.0161 ns165.4429 ns21,982.1578 ns9.190.13
TestEmpty.NET 7.0100002,422.1938 ns87.4866 ns57.8670 ns2,412.8422 ns1.010.03
TestWhiteSpace.NET 7.0100002,387.8995 ns32.0373 ns21.1907 ns2,381.0133 ns0.990.01