一尘不染

DateTime.Now现在是衡量函数性能的最佳方法吗?

c#

我需要找到一个瓶颈,并需要尽可能准确地测量时间。

以下代码片段是衡量性能的最佳方法吗?

DateTime startTime = DateTime.Now;

// Some execution process

DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);

阅读 277

收藏
2020-05-19

共1个答案

一尘不染

不,这不对。使用秒表(在中System.Diagnostics

Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();

Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);

秒表会自动检查是否存在高精度计时器。

值得一提的是,由于要进行时区,DST等工作,DateTime.Now通常速度要慢得多。DateTime.UtcNow

DateTime.UtcNow通常具有15毫秒的分辨率。有关精确度的信息,请参见John
Chapman的博客文章
DateTime.Now

有趣的琐事:DateTime.UtcNow如果您的硬件不支持高频计数器,秒表将重新显示。您可以通过查看静态字段Stopwatch.IsHighResolution来检查Stopwatch是否使用硬件来实现高精度。

2020-05-19