经过时间的计算器,以毫秒为单位C#

时间:2012-11-27 17:34:30

标签: 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;

elapsed_time给出负值。

如何更换DateTime以获取经过时间的实际值?

7 个答案:

答案 0 :(得分:63)

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;

答案 1 :(得分:9)

根据评论回答编辑

这个答案只试图计算两次之间经过的总毫秒数,其中时间直接来自DateTime.Now。根据谈话,我们了解DateTime.Now容易受到外界的影响。因此,最好的解决方案是使用Stopwatch类。这是一个更好地解释(IMO)并讨论performance between DateTimeNow, DateTime.Ticks, StopWatch

的链接

原始答案

将它转换为int的方式就是问题。你需要更好的铸造和额外的元素:) 与有效的计时器相比,这可能看起来很简单。但它的确有效:

DateTime startTime, endTime;
startTime = DateTime.Now;

//do your work

endTime = DateTime.Now;
Double elapsedMillisecs = ((TimeSpan)(endTime - startTime)).TotalMilliseconds;

网络上有reference,您也可以查看。

答案 2 :(得分:3)

您正在寻找Stopwatch课程。它专门用于恢复高精度时间测量。

var stopwatch = new Stopwatch();

stopwatch.Start();
for (int i = 0; i < N_ITER; i++)
{
     // cpu intensive sequence
}
stopwatch.Stop();

var elapsed = stopwatch.ElapsedMilliseconds;

答案 3 :(得分:2)

DateTime.Millisecond只返回秒的毫秒分数,从0-999。在进行计时时,您需要考虑剩余的日期时间。

但是,您应该考虑使用StopWatch类来实现这些性能时序。

答案 4 :(得分:1)

以下是我用来获取简单计算时间的内容:

class Program
{
    static void Main(string[] args)
    {
        Decimal p = 0.00001m;
        Decimal i = 0m;
        DateTime start = new DateTime();
        DateTime stop = new DateTime();

        for (i = p; i <= 5; i = i + p)
        {
            Console.WriteLine("result is: " + i);
            if (i==p) start = DateTime.Now;
            if (i==5) stop = DateTime.Now;
        }

        Console.WriteLine("Time to compute: " + (stop-start));

    }
}

答案 5 :(得分:0)

这对我有用:

var lapsedTime = DateTime.Now.Subtract(beginTime).TotalMilliseconds;

答案 6 :(得分:0)

秒表URL中有示例
https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.stopwatch?view=netframework-4.8

using System.Diagnostics;
//...
Stopwatch watch = new Stopwatch();
watch.Start();
// here the complex program. 
//...
watch.Stop();
TimeSpan timeSpan = watch.Elapsed;
Console.WriteLine("Time: {0}h {1}m {2}s {3}ms", timeSpan.Hours, timeSpan.Minutes, 
timeSpan.Seconds, timeSpan.Milliseconds);