为什么秒表第一次走时会嘀嗒地走得更长?

本文关键字:嘀嗒 第一次 为什么 | 更新日期: 2023-09-27 17:50:01

我在while循环中运行这段代码大约10000次,我注意到timeSpent大约是4,除了第一次,这是~500,为什么?

Stopwatch s;
long price;
count = 10000;
while (count!=0)
{
   s = Stopwatch.StartNew();
   price = classA.Method(..some inputs...);  //this method do some iterations to return back a long given some inputs
   s.Stop();
   timeSpent = s.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));
   s.Reset();
   /*write the price, timeSpent and inputs into a .txt file*/
   count--;
}

为什么秒表第一次走时会嘀嗒地走得更长?

第一次调用方法时,将其从IL编译为本机代码。任何后续调用都将重用生成的本机代码。因此,通常情况下,您会期望第一次调用方法所花费的时间最长。

不幸的是,很难证明这就是原因,但是可以解释它。在基准测试/分析时,我多次看到同样的事情发生:第一次调用花费的时间最长。我通常通过丢弃第一次运行来解决这个问题。

当然,你调用的方法可能有副作用,获取资源并缓存它们,或者只是在第一次调用时只发生一次的任何事情。这些只是我说很难确定的一些原因。