【发布时间】:2010-11-03 15:35:16
【问题描述】:
Stopwatch sw = new Stopwatch();
for (int i = 0; i < lines.Length; i++)
{
sw.Start();
fn(); //call function
sw.Stop();
}
Console.WriteLine(sw.ElapsedMilliseconds);
long total =0;
for (int i = 0; i < lines.Length; i++)
{
Stopwatch sw = Stopwatch.StartNew();
fn(); //call function
sw.Stop();
total += sw.ElapsedMilliseconds;
}
Console.WriteLine(total);
输出不一样,你有什么解释吗?
【问题讨论】:
-
对于任何合理的长度 fn()(值得分析),与循环相关的开销可以忽略不计,并且在任何情况下都小于与 Start 和 Stop 相关的开销。一方面,Start 和 Stop 都有方法调用开销(假设没有内联),而简单的 for 循环只是一个增量和比较分支。