当我对代码进行基准测试时,我注意到第一次运行太慢,而接下来的运行太快。原因是什么?
for (int i = 0; i < 10; i++)
{
var timer = new Stopwatch();
timer.Start();
var expression = new Expression('x');
Console.WriteLine(timer.ElapsedTicks);
}
结果
15096
6
0
1
1
1
1
1
0
有没有办法即使在第一次运行时也能始终获得最大速度?
最佳答案
您正在测量抖动开销。恰到好处。对于Expression来说,这主要是磁盘开销,它的ngen-ed代码需要从System.Core.ni.dll文件加载到RAM中。或者换句话说,您正在测量硬页面错误的成本。它将驻留一段时间,这就是为什么它在您第二次及随后调用其构造函数时速度很快。
不,您始终必须支付这笔费用。
关于c# - 第一轮和第二轮速度差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879271/