从本文中http://blogs.msdn.com/b/ericlippert/archive/2010/04/08/precision-and-accuracy-of-datetime.aspx
现在,问题是“从开始到结束已经过了多长时间?”和“现在几点了”是完全不同的问题吗?如果您想问的问题是某个操作花费了多长时间,并且您想要一个高精度、高精度的答案,那么请使用StopWatch类。它确实有纳秒的精度和精度,接近它的精度。
问题是,如果我需要从开始到结束的时间,并且需要20毫秒的精度,我应该使用什么?
StopWatch的精度要好得多,所以我担心我会为我不需要的“额外精度”支付处理器时间。
DateTime.Now有我所需要的精确性,但它也有很多额外的东西,如月份、年份等,我再次担心这会使它慢得多。
发布于 2011-12-12 09:23:16
这篇文章应该能帮助你:
http://www.dijksterhuis.org/timing-function-performance-stopwatch-class/
一般来说,它说秒表是更好的选择,这甚至是我的个人意见。
发布于 2011-12-12 09:36:51
唯一的(相当大的?)StopWatch的开销是QueryPerformanceFrequency的合并,以确定StopWatch是否会以高分辨率的频率进行。实际上,只有在没有高分辨率频率的情况下,它才是一个开销。否则是一个更快的选项,因为它使用WIN32 QueryPerformanceCounter调用而不是DateTime.UtcNow.Ticks获得时间戳。
发布于 2011-12-12 09:37:06
据我在互联网上所读到的,直到现在,来自System.Diagnostics命名空间的System.Diagnostics类是用于计时的最好的类。
如果希望精度低于1ms,请记住使用Elapsed.TotalMilliseconds属性检索经过的时间,sw.ElapsedMilliseconds将以1ms的增量跳转。
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);
}
}
}https://stackoverflow.com/questions/8472124
复制相似问题