Aujourd'hui, je souhaite partager avec vous une petite astuce très simple et rapide. Lors de mes projets, j'ai souvent besoin de mesurer la durée d'exécution d'un bloc de code pour générer des statistiques ou faire de l'optimisation de performance. Généralement, j'utilise la classe C# “Stopwatch” qui fait très bien le job mais est un peu lourde à utiliser toute seule. Je me suis donc amusé à écrire un petit outil me permettant de faciliter et simplifier cette tâche :

public class PerformanceMeasure : IDisposable
{
	private Stopwatch _stopwatch = new Stopwatch();

	private string _sessionName;
	
	public long Result
	{
		get
		{
			return _stopwatch.ElapsedMilliseconds;
		}
	}
	
	/// <summary>
	/// Constructeur
	/// </summary>
	/// <param name="sessionName">Nom de la session</param>
	public PerformanceMeasure(string sessionName)
	{
		_sessionName = sessionName;
		_stopwatch.Start();
	}
	
	public void Dispose()
	{
		_stopwatch.Stop();
	
		Console.WriteLine(string.Format("[PERFORMANCE] {0}: {1}ms", _sessionName, Result));
	}
}

En terme d'utilisation, voici ce que ça donne :

public void MyFunction()
{
	...
	
	using (var perf = new PerformanceMeasure("Session1"))
	{
		...
	}
	
	...
}

On peut facilement donner un nom à une mesure (ce qui facilite la lecture et l'analyse), personnaliser l'affichage (un simple **Console.WriteLine(…) **ou une écriture dans une base de données ou dans un fichier pour faire des stats) ou encore activer uniquement la mesure en mode debug. Le champ des possibilités est assez large, et je compte bien enrichir cet outil au fur et à mesure de mes besoins.