Calculate the execution time of a method
Possible Duplicate:
How do I measure how long a function is running?
I have an I/O time-taking method which copies data from a location to another. What's the best and most real way of calculating the execution time? Thread
? Timer
? Stopwatch
? Any other solution? I want the most exact one, and briefest as much as possible.
Stopwatch
is designed for this purpose and is one of the best ways to measure time execution in .NET.
var watch = System.Diagnostics.Stopwatch.StartNew();
// the code that you want to measure comes here
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
Do not use DateTime to measure time execution in .NET.
UPDATE:
As pointed out by @series0ne in the comments section: If you want a real precise measurement of the execution of some code, you will have to use the performance counters that's built into the operating system. The following answer contains a nice overview.
From personal experience, the System.Diagnostics.Stopwatch
class can be used to measure the execution time of a method, however, BEWARE : It is not entirely accurate!
Consider the following example:
Stopwatch sw = Stopwatch.StartNew();
for(int index = 0; index < 10; index++)
{
DoSomething();
Console.WriteLine(sw.ElapsedMilliseconds);
}
sw.Stop();
Example results
132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms
Now you're wondering; "well why did it take 132ms the first time, and significantly less the rest of the time?"
The answer is that Stopwatch
does not compensate for "background noise" activity in .NET, such as JITing. Therefore the first time you run your method, .NET JIT's it first. The time it takes to do this is added to the time of the execution. Equally, other factors will also cause the execution time to vary.
What you should really be looking for absolute accuracy is Performance Profiling !
Take a look at the following:
RedGate ANTS Performance Profiler is a commercial product, but produces very accurate results. - Boost the performance of your applications with .NET profiling
Here is a StackOverflow article on profiling: - What Are Some Good .NET Profilers?
I have also written an article on Performance Profiling using Stopwatch that you may want to look at - Performance profiling in .NET
StopWatch
class looks for your best solution.
Stopwatch sw = Stopwatch.StartNew();
DoSomeWork();
sw.Stop();
Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);
Also it has a static field called Stopwatch.IsHighResolution
. Of course, this is a hardware and operating system issue.
Indicates whether the timer is based on a high-resolution performance counter.
链接地址: http://www.djcxy.com/p/62246.html上一篇: 相同的查询在SP中具有不同的执行计划
下一篇: 计算方法的执行时间