计算一个方法的执行时间
计算一个方法的执行时间
可能重复:
我有一个从一个位置复制数据到另一个位置的 I/O 时耗方法。什么是最好的和最真实的计算执行时间的方法?Thread
?Timer
?Stopwatch
?还有其他的解决方案吗?我希望精确度最高,并尽可能简洁。
admin 更改状态以发布 2023年5月22日
从个人经验来看,System.Diagnostics.Stopwatch
类可以用于测量方法的执行时间,然而,请注意:它并不完全准确!
考虑以下例子:
Stopwatch sw; for(int index = 0; index < 10; index++) { sw = Stopwatch.StartNew(); DoSomething(); Console.WriteLine(sw.ElapsedMilliseconds); } sw.Stop();
示例结果
132ms 4ms 3ms 3ms 2ms 3ms 34ms 2ms 1ms 1ms
现在你想知道:“为什么第一次需要132ms,而其余时间明显更少呢?”
答案是,Stopwatch
没有补偿.NET中的“背景噪音”活动,例如JITing。因此,当你第一次运行方法时,.NET首先将其JIT。需要做到这一点的时间被加到执行时间上。同样,其他因素也会导致执行时间的变化。
你真正应该寻找的是绝对精确度的性能分析!
看一下以下内容:
RedGate ANTS性能分析器是一种商业产品,但能产生非常准确的结果。-用.NET分析提高应用程序性能
这是一个关于分析的StackOverflow文章:-一些好的.NET分析器是什么?
我也写了一篇关于使用计时器进行性能分析的文章,你可能想看看-.NET性能分析