计算一个方法的执行时间

22 浏览
0 Comments

计算一个方法的执行时间

可能重复:

如何测量函数运行的时间?

我有一个从一个位置复制数据到另一个位置的 I/O 时耗方法。什么是最好的和最真实的计算执行时间的方法?ThreadTimerStopwatch?还有其他的解决方案吗?我希望精确度最高,并尽可能简洁。

admin 更改状态以发布 2023年5月22日
0
0 Comments

从个人经验来看,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性能分析

0
0 Comments

Stopwatch是专为此目的设计的,是.NET中测量时间执行的最佳方式之一。

var watch = System.Diagnostics.Stopwatch.StartNew();
// the code that you want to measure comes here
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;

不要使用DateTime来测量.NET中的时间执行。


更新:

如@series0ne在评论部分指出的那样:如果您想精确测量一些代码的执行时间,您将不得不使用操作系统内置的性能计数器。 以下答案包含一个很好的概述。

0