System.Diagnostics.Stopwatch的精度有多高?我想为不同的代码路径做一些测量,需要非常准确。我应该使用停表还是有其他更准确的解决方案。
有人告诉我有时候停表会提供不正确的信息。
System.Diagnostics.Stopwatch的精度有多高?我想为不同的代码路径做一些测量,需要非常准确。我应该使用停表还是有其他更准确的解决方案。
有人告诉我有时候停表会提供不正确的信息。
我刚刚写了一篇文章,解释了如何进行测试设置以获得秒表高精度(0.1毫秒以下)的准确性。我认为这应该能解释清楚所有内容。
http://www.codeproject.com/KB/testing/stopwatch-measure-precise.aspx
System.Diagnostics.Stopwatch类确实可以准确地测量时间,但ElapsedTicks方法的工作方式导致一些人得出了不准确的结论,实际上是他们在代码中存在逻辑错误。
一些开发人员认为Stopwatch不准确的原因是,Stopwatch的ElapsedTicks与DateTime中的Ticks不相等。问题出现在应用程序代码使用ElapsedTicks创建新的DateTime时。
var watch = new Stopwatch();
watch.Start();
... (perform a set of operations)
watch.Stop();
var wrongDate = new DateTime(watch.ElapsedTicks); // This is the WRONG value.
// This converts stopwatch ticks into DateTime ticks.
// First convert to TimeSpan, then convert to DateTime
var rightDate = new DateTime(watch.Elapsed.Ticks);
秒表类在不同的配置下返回不同的值,因为频率取决于安装的硬件和操作系统。
使用秒表类,我们只能对执行时间进行粗略估计。每次执行都会返回不同的值,因此我们需要对不同的执行时间取平均值。
更多信息:http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
MSDN有一些示例,展示了秒表的使用。他们还展示了它在纳秒级别上的精度。希望这能对你有所帮助!