How accurate is System.Diagnostics.Stopwatch?

后端 未结 8 2220
花落未央
花落未央 2020-11-30 10:55

How accurate is System.Diagnostics.Stopwatch? I am trying to do some metrics for different code paths and I need it to be exact. Should I be using stopwatc

8条回答
  •  忘掉有多难
    2020-11-30 11:40

    The System.Diagnostics.Stopwatch class does accurately measure time elapsed, but the way that the ElapsedTicks method works has led some people to the conclusion that it is not accurate, when they really just have a logic error in their code.

    The reason that some developers think that the Stopwatch is not accurate is that the ElapsedTicks from the Stopwatch DO NOT EQUATE to the Ticks in a DateTime. The problem arises when the application code uses the ElapsedTicks to create a new 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.
    

    If necessary, the stopwatch duration can be converted to a DateTime in the following way:

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

    Here is an article that explains the problem in more detail: http://geekswithblogs.net/BlackRabbitCoder/archive/2012/01/12/c.net-little-pitfalls-stopwatch-ticks-are-not-timespan-ticks.aspx

提交回复
热议问题