我需要找到一个瓶颈,并需要尽可能准确地测量时间。
以下代码片段是衡量性能的最佳方法吗?
DateTime startTime = DateTime.Now; // Some execution process DateTime endTime = DateTime.Now; TimeSpan totalTimeTaken = endTime.Subtract(startTime);
不,这不对。使用秒表(在中System.Diagnostics)
System.Diagnostics
Stopwatch sw = Stopwatch.StartNew(); PerformWork(); sw.Stop(); Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);
秒表会自动检查是否存在高精度计时器。
值得一提的是,由于要进行时区,DST等工作,DateTime.Now通常速度要慢得多。DateTime.UtcNow
DateTime.Now
DateTime.UtcNow
DateTime.UtcNow通常具有15毫秒的分辨率。有关精确度的信息,请参见John Chapman的博客文章DateTime.Now。
有趣的琐事:DateTime.UtcNow如果您的硬件不支持高频计数器,秒表将重新显示。您可以通过查看静态字段Stopwatch.IsHighResolution来检查Stopwatch是否使用硬件来实现高精度。