Stopwatch.Restart() : une autre nouveauté de .NET 4.0

C’est le genre de petite fonction qui ne mange pas de pain, mais qui montre que parfois, Microsoft prend en compte les demandes des développeurs. Restart() ne fait rien qu’il était impossible de faire en .NET 2.0 : il rend simplement l’utilisation des chronomètres plus élégante.

Imaginez le code suivant :

static void Main(string[] args)
{
    Stopwatch Chrono = Stopwatch.StartNew();
    // Traitement 1
    Chrono.Stop();
    Console.WriteLine("Traitement 1 : {0}", Chrono.Elapsed);

    Chrono.Reset();
    Chrono.Start();
    // Traitement 2
    Chrono.Stop();
    Console.WriteLine("Traitement 2 : {0}", Chrono.Elapsed);
}

Comme nous devons chronométrer deux traitements, il est nécessaire de remettre à zéro le chronomètre, sinon il repartira de sa valeur affichée pour le premier traitement. Il faut donc appliquer un Reset(), puis seulement relancer le chronomètre avec Start(). Dommage de faire deux lignes de code, et on en vient vite à écrire ceci pour aller plus vite :

static void Main(string[] args)
{
    Stopwatch Chrono = Stopwatch.StartNew();
    // Traitement 1
    Chrono.Stop();
    Console.WriteLine("Traitement 1 : {0}", Chrono.Elapsed);

    Chrono = Stopwatch.StartNew();
    // Traitement 2
    Chrono.Stop();
    Console.WriteLine("Traitement 2 : {0}", Chrono.Elapsed);
}

Mais là, c’est plus un problème de gestion de ressource : pourquoi abandonner une instance de Stopwatch, et donc donner du travail au ramasse-miettes, alors qu’on pourrait continuer à l’utiliser comme montré précédemment ? C’est de la perte de ressources et tout nous pousse à éviter ceci : l’optimisation des performances des machines, le Lean, l’écologie…

La solution : Restart() qui nous permet de garder notre instance de Stopwatch, et en même temps de relancer le chronomètre en une seule instruction :

static void Main(string[] args)
{
    Stopwatch Chrono = Stopwatch.StartNew();
    // Traitement 1
    Chrono.Stop();
    Console.WriteLine("Traitement 1 : {0}", Chrono.Elapsed);

    Chrono.Restart();
    // Traitement 2
    Chrono.Stop();
    Console.WriteLine("Traitement 2 : {0}", Chrono.Elapsed);
}

Ce n’est pas grand chose, mais quand on fait des tests de performance toute la journée, ça sert…

About JP Gouigoux

Jean-Philippe Gouigoux est Architecte Logiciel, MVP Connected Systems Developer. Il intervient régulièrement à l'Université de Bretagne Sud ainsi qu'à l'Agile Tour. Plus de détails sur la page "Curriculum Vitae" de ce blog.
This entry was posted in .NET and tagged . Bookmark the permalink.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha Captcha Reload