我需要计算用C#编写的代码序列的执行时间.使用DateTime.Now我得到的毫秒字段值不正确.例如:
int start_time, elapsed_time;
start_time = DateTime.Now.Millisecond;
for(int i = 0; i < N_ITER; i++) {
// cpu intensive sequence
}
elapsed_time = DateTime.Now.Millisecond - start_time;
Run Code Online (Sandbox Code Playgroud)
elapsed_time给出负值.
我如何替换DateTime以获得经过时间的实际值?
Rav*_*Dev 69
using System.Diagnostics;
//...
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < N_ITER; i++) {
// cpu intensive sequence
}
stopwatch.Stop();
elapsed_time = stopwatch.ElapsedMilliseconds;
Run Code Online (Sandbox Code Playgroud)
bon*_*igo 10
这个答案只是试图计算两次之间经过的总毫秒数,其中时间直接来自DateTime.Now.根据谈话,人们可以理解,DateTime.Now对于外部影响来说,这是很容易受到影响的.因此,最好的解决方案是使用Stopwatch类属性.以下链接可以更好地解释(对我而言)并讨论DateTimeNow,DateTime.Ticks,StopWatch之间的性能.
原始答案
您将其转换为int的方式就是问题所在.你需要更好的投射和额外的元素:)与高效的计时器相比,这可能看起来很简单.但它有效,
DateTime startTime, endTime;
startTime = DateTime.Now;
//do your work
endTime = DateTime.Now;
Double elapsedMillisecs = ((TimeSpan)(endTime - startTime)).TotalMilliseconds;
Run Code Online (Sandbox Code Playgroud)
网上有参考,您可能还想查看:
您正在寻找Stopwatch类。它专为恢复高精度时间测量而设计。
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < N_ITER; i++)
{
// cpu intensive sequence
}
stopwatch.Stop();
var elapsed = stopwatch.ElapsedMilliseconds;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65060 次 |
| 最近记录: |