DateTime.Now 是衡量函数性能的最佳方式吗? [英] Is DateTime.Now the best way to measure a function's performance?
问题描述
我需要找到瓶颈,需要尽可能准确地测量时间.
I need to find a bottleneck and need to accurately as possible measure time.
以下代码片段是衡量性能的最佳方式吗?
Is the following code snippet the best way to measure the performance?
DateTime startTime = DateTime.Now;
// Some execution process
DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);
推荐答案
不,不是.使用秒表(在System.Diagnostics
)
Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();
Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);
秒表会自动检查高精度计时器是否存在.
Stopwatch automatically checks for the existence of high-precision timers.
值得一提的是,DateTime.Now
通常比 DateTime.UtcNow
慢很多,因为必须使用时区来完成工作,夏令时 等.
It is worth mentioning that DateTime.Now
often is quite a bit slower than DateTime.UtcNow
due to the work that has to be done with timezones, DST and such.
DateTime.UtcNow 通常具有 15 毫秒的分辨率.请参阅John Chapman 的博文,了解DateTime.现在
精确到一个很好的总结.
DateTime.UtcNow typically has a resolution of 15 ms. See John Chapman's blog post about DateTime.Now
precision for a great summary.
有趣的小知识:如果您的硬件不支持高频计数器,秒表将返回 DateTime.UtcNow
.您可以通过查看静态字段 秒表.IsHighResolution.
Interesting trivia: The stopwatch falls back on DateTime.UtcNow
if your hardware doesn't support a high frequency counter. You can check to see if Stopwatch uses hardware to achieve high precision by looking at the static field Stopwatch.IsHighResolution.
这篇关于DateTime.Now 是衡量函数性能的最佳方式吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!