Timing a Method in C#

Here’s a very quick way to check the performance of a block of code. I’m wrapping a System.Diagnostics.Stopwatch class and sending all timings directly to Debug.WriteLine(). Please be aware that this is a very simplistic approach, and does not guarantee accurate timings.

If you need a more professional approach you may want to check out these tools:
ANTS Profiler
dotTrace Profiler
EQATEC Profiler (Free)

using System;
using System.Diagnostics;

public class Profiler : IDisposable
{
    private Stopwatch _stopWatch;

    public Profiler() : this("Untitled")
    { }

    public Profiler(string title)
    {
        Debug.WriteLine(title);
        _stopWatch = new Stopwatch();
        _stopWatch.Start();
    }

    public void Print(string comment)
    {
        Debug.WriteLine("  {0,-30} {1,10} ms", Crop(comment, 30), _stopWatch.ElapsedMilliseconds);
    }

    public void Dispose()
    {
        _stopWatch.Stop();
        Debug.WriteLine("{0,-30}   {1,10} ms", "Total", _stopWatch.ElapsedMilliseconds);
        _stopWatch = null;
    }

    private string Crop(string input, int length)
    {
        if (input.Length > length)
            return input.Substring(0, length - 3) + "...";
        else
            return input;
    }
}

To measure how quickly a block of code runs, wrap the code in a using statement that creates a new Profiler instance. The Stopwatch begins timing as soon as the Profiler is initialized, and stops when execution moves outside the using block. The current elapsed time can be output by adding a call to Profiler.Print().

private void CalculateTax(decimal amount)
{
    using (var profiler = new Profiler("CalculateTax"))
    {
        // Initialize something
        // ...

        // Output intermediate progress
        profiler.Print("Starting tax calculation");

        // Do something
        // ...
    }
}

A typical output from the example above would appear in the Output Window as this:

CalculateTax
  Starting tax calculation                3 ms
Total                                   132 ms
This entry was posted in Tips and Tricks and tagged , . Bookmark the permalink.

2 Responses to Timing a Method in C#

  1. CrackG says:

    Thanks Code Overlord!! That was a massive help..you rock!

  2. Pingback: Grippers.co.uk

Leave a comment