从开始到结束的经过时间精度为20毫秒

时间:2011-12-12 09:19:55

标签: c#

从这篇文章http://blogs.msdn.com/b/ericlippert/archive/2010/04/08/precision-and-accuracy-of-datetime.aspx

现在,“从开始到结束已经过了多长时间?”的问题是一个完全不同的问题,而不是“现在几点了?”如果你想问的问题是关于一些操作需要多长时间花了,你想要一个高精度,高精度的答案,然后使用StopWatch类。它确实具有接近其精度的纳秒精度和精度。

问题是 - 如果我需要从开始到结束所需的时间,我应该使用什么,我需要20毫秒的精度?

StopWatch具有更好的精度,所以我担心我会花费处理器时间来获得“超精确”,这是我不需要的。

DateTime.Now具有我需要的精确度,但它也有很多额外的东西,如月,年等等。我再次担心这会让它慢得多。

3 个答案:

答案 0 :(得分:3)

本文应该对您有所帮助:

http://www.dijksterhuis.org/timing-function-performance-stopwatch-class/

一般来说,秒表是更好的选择,甚至是我个人的意见。

答案 1 :(得分:1)

StopWatch唯一(相当大的?)开销是QueryPerformanceFrequency的结合,确定StopWatch是否会以高分辨率频率继续运行。实际上只有在没有高分辨率频率的情况下它才是开销。否则是一个更快的选项,因为它获取WIN32 QueryPerformanceCounter调用的时间戳而不是DateTime.UtcNow.Ticks。

答案 2 :(得分:0)

从我在互联网上看到的内容,直到现在来自System.Diagnostics命名空间的StopWatch类是用于计时的最佳类。

如果您希望精度低于1毫秒,请记住使用Elapsed.TotalMilliseconds属性来检索已用时间,sw.ElapsedMilliseconds将以1毫秒的增量跳转。

using System;
using System.Diagnostics;

namespace MySolution
{
    class Program
    {
        static void Main(string[] args)
        {
            var sw = Stopwatch.StartNew();

            // code to be timed here

            sw.Stop();
            Console.WriteLine("Run time in ms = {0}", sw.Elapsed.TotalMilliseconds);
        }
    }
}