时间流逝计算以毫秒为单位C#

Seb*_*ebi 18 c# time timer

我需要计算用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

回答EDITTED添加评论.

这个答案只是试图计算两次之间经过的总毫秒数,其中时间直接来自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)

网上有参考,您可能还想查看:

参考


tme*_*ser 5

您正在寻找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)