可能重复:
How do I measure how long a function is running?
我有一个I/O耗时方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的的方法是什么?Thread
?Timer
?Stopwatch
?任何其他解决方案?我想要最准确的一个,尽可能简单。
可能重复:
How do I measure how long a function is running?
我有一个I/O耗时方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的的方法是什么?Thread
?Timer
?Stopwatch
?任何其他解决方案?我想要最准确的一个,尽可能简单。
8条答案
按热度按时间arknldoa1#
Stopwatch
就是为此目的而设计的,它是测量. NET中执行时间的最佳方法之一。Do not use DateTime用于测量. NET中的执行时间。
更新:
正如@series0ne在评论部分所指出的:如果你想对某些代码的执行进行真实的精确的测量,你将不得不使用操作系统中内置的性能计数器。
ivqmmu1c2#
根据个人经验,
System.Diagnostics.Stopwatch
类可以用来度量方法的执行时间,但是注意:这并不完全准确!考虑以下示例:
示例结果
现在你想知道;* “为什么第一次花了132毫秒,而其余时间明显更少?"*
答案是
Stopwatch
不会补偿.NET中的“背景噪声”活动,例如JIT。因此,第一次运行方法时,.NET JIT首先执行。执行此操作所需的时间将添加到执行时间中。同样,其他因素也会导致执行时间发生变化。您真正需要的是性能分析的绝对准确性!
请看以下内容:
RedGate ANTS Performance Profiler是一个商业产品,但产生非常准确的结果。
下面是一篇关于性能分析的StackOverflow文章:- What Are Some Good .NET Profilers?
我还写了一篇关于使用秒表进行性能分析的文章,您可能想看看-Performance profiling in .NET
vhipe2zx3#
StopWatch
类寻找您的最佳解决方案。它还有一个名为
Stopwatch.IsHighResolution
的静态字段。当然,这是硬件和操作系统的问题。指示计时器是否基于高分辨率性能计数器。
tjjdgumg4#
如果您有兴趣了解性能,最好的答案是使用分析器。
否则,System.Diagnostics.StopWatch提供高分辨率定时器。
qvk1mo1f5#
以下是Microsoft Doc:
输出:
RunTime 00:00:09.94
axkjgtzd6#
StopWatch将使用高分辨率计数器
Stopwatch通过对基础计时器机制中的计时器滴答计数来测量运行时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类使用该计数器来测量运行时间。否则,Stopwatch类使用系统计时器来测量运行时间。使用Frequency和IsHighResolution字段可确定Stopwatch计时实现的精度和分辨率。
如果你在测量IO,那么你的数字可能会受到外部事件的影响,我会担心太多的re.xacutness *(正如你上面所指出的)。相反,我会采取一系列测量,并考虑这些数字的平均值和分布。
eh57zj3b7#
您还可以使用此“获取自系统启动以来经过的毫秒数”。
举个例子
of1yzvn48#