patterncsharpCritical
Is DateTime.Now the best way to measure a function's performance?
Viewed 0 times
datetimefunctionmeasurethenowbestwayperformance
Problem
I need to find a bottleneck and need to accurately as possible measure time.
Is the following code snippet the best way to measure the performance?
Is the following code snippet the best way to measure the performance?
DateTime startTime = DateTime.Now;
// Some execution process
DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);Solution
No, it's not. Use the Stopwatch (in
Stopwatch automatically checks for the existence of high-precision timers.
It is worth mentioning that
DateTime.UtcNow typically has a resolution of 15 ms. See John Chapman's blog post about
Interesting trivia: The stopwatch falls back on
System.Diagnostics)Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();
Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);Stopwatch automatically checks for the existence of high-precision timers.
It is worth mentioning that
DateTime.Now often is quite a bit slower than DateTime.UtcNow due to the work that has to be done with timezones, DST and such.DateTime.UtcNow typically has a resolution of 15 ms. See John Chapman's blog post about
DateTime.Now precision for a great summary.Interesting trivia: The stopwatch falls back on
DateTime.UtcNow if your hardware doesn't support a high frequency counter. You can check to see if Stopwatch uses hardware to achieve high precision by looking at the static field Stopwatch.IsHighResolution.Code Snippets
Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();
Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);Context
Stack Overflow Q#28637, score: 676
Revisions (0)
No revisions yet.