views:

269

answers:

7

How can I find out how much time my C# code takes to run?

+1  A: 

Check out the Stopwatch class.

Andy Gaskell
+11  A: 

The Stopwatch class offers high-precision timing in .NET. It is capable of measuring time with sensitivity of around 100s of nanoseconds (fractions of milliseconds). To get the exact resolution, read the value of Stopwatch.Frequency.

var timer = System.Diagnostics.Stopwatch.StartNew();
// Run code here.
var elapsed = timer.ElapsedMilliseconds.

Also, be sure to run your code repeatedly (as many times as is feasible) to get a better average time, as well as to reduce the effects of fluctuations in CPU load.

Noldorin
+2  A: 

Check out the Stopwatch class:

Stopwatch sw = new Stopwatch();
sw.Start();

// your code here

sw.Stop();
TimeSpan elapsedTime = sw.Elapsed;
Fredrik Mörk
+5  A: 

As others have said, the Stopwatch class is good for the simple timing side of things. Other bits to bear in mind though:

  • Your code may generate objects which will need to be garbage collected after you've stopped the stopwatch
  • Conversely your timing may include other objects being garbage collected even if they have nothing to do with your code
  • If you start timing before you run your method for the first time, it will include JIT time
  • If you take a very short time, that leads to very unpredictable results - for benchmarking I tend to prefer running code for many seconds, to account for the app being interrupted by other processes etc.

If you're interested in benchmarking, I have the MiniBench project which I must get round to working on again at some point - it's not quite where I want it to end up, but it's a start. I talk more about what I want to achieve with it in this blog post.

Jon Skeet
Personal thanks for MiniBench, Jon - it has become invaluable tool to me.
Callum Rogers
@C Rogers: You've probably used it more than I have then! I really will get back to it some time... writing has rather taken over for the moment though :(
Jon Skeet
A: 

I recommend using a profiling tool such as ANTS to test the speed of your application and find slow code. This will allow you to do a line-by-line test of execution times.

apathetic
A: 

What's wrong with the Visual Studio profiler? Have you tried that?

peSHIr
A: 

If you want simple, just put an N-iteration loop around it and use StopWatch (or just a wristwatch) and divide by N. For example, if you want microseconds, let N = 1000000. If you're worried about the overhead of the loop, just unroll it by a factor of 10.

Mike Dunlavey