3 回答
TA贡献1886条经验 获得超2个赞
根据MSDN:
秒表通过计算基础计时器机制中的计时器滴答来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类将使用该计数器来测量经过的时间。否则,秒表类将使用系统计时器来测量经过的时间。使用Frequency和IsHighResolution字段来确定秒表计时实现的精度和分辨率。
它使用的分辨率/精度高于DateTime.Now。
您还可以查看以下相关链接:
Environment.TickCount与DateTime.Now
DateTime.Now现在是衡量函数性能的最佳方法吗?
DateTime足够精确到秒,但是我推荐的以外的任何东西StopWatch。
TA贡献2003条经验 获得超2个赞
最好使用Stopwatch类,因为它比减去DateTime值更准确:
Stopwatch s = Stopwatch.StartNew();
// Tested code here
s.Stop();
Console.WriteLine("Elapsed Time: {0} ms", s.ElapsedMilliseconds);
不幸的是,这段简单的代码大部分时间都无法获得准确的测量结果,因为在OS的内部进行了大量的活动,这可能会占用一些CPU时间并减慢代码的执行速度。这就是为什么最好多次执行测试,然后删除最低和最高的时间。对于那个小女孩来说,拥有一种方法可以多次执行被测试的代码,删除最短和最大的时间并计算平均时间是一个很好的解决方案。我已经在博客中发布了一种示例测试方法。
TA贡献1831条经验 获得超10个赞
此计时功能性能链接讨论您的确切问题,特别是本段:
问题是,根据MSDN,DateTime.Now函数的分辨率为10毫秒以上,我们需要调用两次!因此,这会在您的运行时测量中引入20毫秒以上的摆幅。由于我们的函数调用返回时间通常可能比20ms窗口快得多,因此这还不够好。
编辑:听起来像第二个DateTime.Now在与秒表方法结束时不同的时间被调用。
添加回答
举报