I'm totally confused between these 4. What is the difference between ElapsedMilliseconds (long), ElapsedTicks (long), Elapsed.TotalMilliseconds (double) and Elapsed.Milliseconds (int)?
I have a function
{ Stopwatch sw = new Stopwatch(); sw.Start(); MyTimeConsumingAction(); sw.Stop(); sw.//what? }
How do I get the correct time consumed by my long running process from elapsed property of Stopwatch object in milliseconds?
Edit: I tried msdn documentation but it isn't anything detailed there..
Elapsed. TotalMilliseconds is a double that can return execution times to the partial millisecond while ElapsedMilliseconds is Int64 . e.g. a stopwatch at 0.0007 milliseconds would return 0, or 1234.56 milliseconds would return 1234 in this property. So for precision always use Elapsed.
A tick is the smallest unit of time that the Stopwatch timer can measure. Use the Frequency field to convert the ElapsedTicks value into a number of seconds. You can query the properties Elapsed, ElapsedMilliseconds, and ElapsedTicks while the Stopwatch instance is running or stopped.
Elapsed.TotalMilliseconds (double)
returns the total number of whole and fractional milliseconds elapsed since inception
e.g. a stopwatch stopped at 1.23456 seconds would return 1234.56 in this property. See TimeSpan.TotalMilliseconds on MSDN
Elapsed.Milliseconds (int)
returns the number of whole milliseconds in the current second
e.g. a stopwatch at 1.234 seconds would return 234 in this property. See TimeSpan.Milliseconds
ElapsedTicks (long) returns the ticks since start of the stopwatch.
In the context of the original question, pertaining to the Stopwatch class, ElapsedTicks
is the number of ticks elapsed. Ticks occur at the rate of Stopwatch.Frequency
, so, to compute seconds elapsed, calculate: numSeconds = stopwatch.ElapsedTicks / Stopwatch.Frequency
.
The old answer defined ticks as the number of 100 nanosecond periods, which is correct in the context of the DateTime class, but not correct in the context of the Stopwatch class. See Stopwatch.ElapsedTicks on MSDN.
ElapsedMilliseconds
returns a rounded number to the nearest full millisecond, so this might lack precisionElapsed.TotalMilliseconds
property can give.
Elapsed.TotalMilliseconds
is a double
that can return execution times to the partial millisecond while ElapsedMilliseconds
is Int64
. e.g. a stopwatch at 0.0007 milliseconds would return 0, or 1234.56 milliseconds would return 1234 in this property. So for precision always use Elapsed.TotalMilliseconds
.
See Stopwatch.ElapsedMilliseconds on MSDN for clarification.
Reflecting the Stopwatch class reveals that ElapsedMilliseconds is Elapsed ticks converted (and rounded) to milliseconds:
public TimeSpan Elapsed { get { return new TimeSpan(this.GetElapsedDateTimeTicks()); } } public long ElapsedMilliseconds { get { return this.GetElapsedDateTimeTicks() / 10000L; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With