我在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--;
}
答案 0 :(得分:2)
第一次调用方法时,它会从IL编译为本机代码。任何后续调用都会重用生成的本机代码。因此,一般情况下,您会在第一次调用方法时花费最长的时间。
遗憾的是,很难证明这是原因,但可能解释它。我看到同样的事情在基准测试/分析时多次发生:第一次调用时间最长。我通常只是放弃第一次运行来解决这个问题。
当然,您调用的方法可能会产生副作用,获取资源并缓存它们,或者只发生一次且仅在第一次调用时发生的任何事情。这些只是我说很难确定的一些原因。