web-dev-qa-db-fra.com

Dois-je arrêter le chronomètre à la fin de la méthode?

Imaginons que nous ayons des mesures simples en utilisant Stopwatch

public void DoWork()
{
    var timer = Stopwatch.StartNew();
    // some hard work
    Logger.Log("Time elapsed: {0}", timer.Elapsed);
    timer.Stop(); // Do I need to call this?
}

Selon MSDN:

Dans un scénario de chronomètre typique, vous appelez la méthode Start, puis appelez éventuellement la méthode Stop, puis vous vérifiez le temps écoulé à l'aide de la propriété Elapsed.

Je ne sais pas si je dois appeler cette méthode lorsque je ne suis plus intéressé par l'instance du minuteur. Dois-je "nettoyer" en utilisant la méthode Stop?

MODIFIER

Gardez à l'esprit que Logger.Log (..) ne coûte rien car timer.Elapsed est lu avant les journaux de l'enregistreur.

67
Dariusz

Non, vous n'avez pas besoin de l'arrêter. Stop() arrête simplement le suivi du temps écoulé. Cela ne libère aucune ressource

58
Uriil

Non, il n'est pas nécessaire de l'arrêter ou de le nettoyer.

Stopwatch n'utilise aucune ressource non managée (si vous pensiez à IDisposable). Il n'utilise en fait aucune ressource (sauf à partir de la mémoire utilisée par l'objet lui-même, bien sûr)!

Dans les implémentations Windows de .NET (.NET Framework complet, Mono, .NET Core), il appelle simplement l'API Windows QueryPerformanceCounter() si nécessaire (sur Start() et Stop() et lors de la lecture Elapsed) pour récupérer un horodatage haute résolution.

Dans les implémentations Linux de Mono et .NET Core, il utilise clock_gettime fonction pour récupérer une valeur de temps croissante monotone.

Pour tous ceux qui sont vraiment curieux des détails de l'implémentation: lisez ce post .

25
Mohammad Dehghan

Je pense que Stop est utile si vous souhaitez réutiliser la valeur Elapsed.

3
vvv