秒表与将System.DateTime.Now用于计时事件进行对比

我想跟踪代码的性能,因此我使用来存储开始时间和结束时间System.DateTime.Now。我将两者之间的差异作为执行代码的时间。

我注意到,虽然差异似乎并不准确。所以我尝试使用一个Stopwatch对象。事实证明,这要准确得多。

谁能告诉我为什么Stopwatch比使用来计算开始和结束时间之间的差会更准确System.DateTime.Now

顺便说一句,我说的不是十分之一。我大约有15-20%的差异。


慕桂英546537
浏览 714回答 3
3回答

MM们

根据MSDN:秒表通过计算基础计时器机制中的计时器滴答来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类将使用该计数器来测量经过的时间。否则,秒表类将使用系统计时器来测量经过的时间。使用Frequency和IsHighResolution字段来确定秒表计时实现的精度和分辨率。它使用的分辨率/精度高于DateTime.Now。您还可以查看以下相关链接:Environment.TickCount与DateTime.NowDateTime.Now现在是衡量函数性能的最佳方法吗?DateTime足够精确到秒,但是我推荐的以外的任何东西StopWatch。

湖上湖

最好使用Stopwatch类,因为它比减去DateTime值更准确:Stopwatch s = Stopwatch.StartNew();// Tested code heres.Stop();Console.WriteLine("Elapsed Time: {0} ms", s.ElapsedMilliseconds);不幸的是,这段简单的代码大部分时间都无法获得准确的测量结果,因为在OS的内部进行了大量的活动,这可能会占用一些CPU时间并减慢代码的执行速度。这就是为什么最好多次执行测试,然后删除最低和最高的时间。对于那个小女孩来说,拥有一种方法可以多次执行被测试的代码,删除最短和最大的时间并计算平均时间是一个很好的解决方案。我已经在博客中发布了一种示例测试方法。

慕哥6287543

此计时功能性能链接讨论您的确切问题,特别是本段:问题是,根据MSDN,DateTime.Now函数的分辨率为10毫秒以上,我们需要调用两次!因此,这会在您的运行时测量中引入20毫秒以上的摆幅。由于我们的函数调用返回时间通常可能比20ms窗口快得多,因此这还不够好。编辑:听起来像第二个DateTime.Now在与秒表方法结束时不同的时间被调用。
打开App,查看更多内容
随时随地看视频慕课网APP