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.
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
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 .
Je pense que Stop est utile si vous souhaitez réutiliser la valeur Elapsed.