System.Diagnostics.Stopwatch的准确度如何?

leo*_*ora 28 .net c# performance stopwatch

System.Diagnostics.Stopwatch的准确度如何?我正在尝试为不同的代码路径做一些指标,我需要它准确.我应该使用秒表还是有其他更准确的解决方案.

我被告知有时秒表会提供不正确的信息.

Tho*_*fer 19

我刚刚写了一篇文章,解释了如何通过测试设置来获得秒表的高精度(优于0.1ms).我认为应该解释一切.

http://www.codeproject.com/KB/testing/stopwatch-measure-precise.aspx

  • 秒是小写的.ms不是mS.http://en.wikipedia.org/wiki/Second#SI_multiples(在您的文章中相同) (2认同)

use*_*241 7

System.Diagnostics.Stopwatch类可以准确地测量经过的时间,但是ElapsedTicks方法的工作方式使得一些人得出的结论是,当他们的代码中只有一个逻辑错误时,它不准确.

一些开发人员认为秒表不准确的原因是秒表的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.
Run Code Online (Sandbox Code Playgroud)

如有必要,可以通过以下方式将秒表持续时间转换为DateTime:

// This converts stopwatch ticks into DateTime ticks.
// First convert to TimeSpan, then convert to DateTime
var rightDate = new DateTime(watch.Elapsed.Ticks); 
Run Code Online (Sandbox Code Playgroud)

这篇文章更详细地解释了这个问题:http: //geekswithblogs.net/BlackRabbitCoder/archive/2012/01/12/c.net-little-pitfalls-stopwatch-ticks-are-not-timespan-ticks. ASPX


CMS*_*CMS 0

为什么不分析你的代码而不是关注微基准?

有一些很好的开源分析器,例如:

  • 有用的信息,但这是另一个问题的答案。 (11认同)
  • 如前所述,这并没有回答问题。 (8认同)
  • 请注意,Google Code 上的 NProf 网站表示 NProf 已不再开发 - 它推荐使用 [SlimTune](http://code.google.com/p/slimtune/)。 (2认同)