我应该在方法结束时停止秒表吗?

让我们想象一下,使用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? } 

根据MSDN:

在典型的秒表scheme中,您调用Start方法, 然后最终调用Stop方法 ,然后使用Elapsed属性检查已用时间。

我不确定当我不再对timer实例感兴趣时是否应该调用这个方法。 我应该使用Stop方法“清除”吗?

编辑

请记住,Logger.Log(..) timer.Elapsed任何费用,因为timer.Elapsedlogging器日志之前读取的。

不,你不需要阻止它。 Stop()只是停止跟踪已用时间。 这不会释放任何资源

不,不需要停止或清理。

Stopwatch不使用任何非托pipe资源(如果您认为IDisposable )。 它实际上根本不使用任何资源!

在.NET Framework的windows实现中,只需要时(在Start()Stop()以及读取Elapsed )调用QueryPerformanceCounter() Windows API来检索高分辨率时间戳。

在其他实现(Linux和maxOS上的Mono和.NET Core)中,也应该使用相同的OS调用。

我认为停止是有用的,如果你想重用Elapsed值。

 //disposable StopWatch internal class StopWatch :Stopwatch, IDisposable { public StopWatch() { Start(); } private string _name; public string Name { get => _name; set => _name = $"{value} "; } public void Dispose() { Stop(); Debug.Print(string.Format("{0}RunTime {1:00}:{2:00}:{3:00}.{4:00}", Name, Elapsed.Hours, Elapsed.Minutes,Elapsed.Seconds, Elapsed.Milliseconds / 10)); } } //Use example internal class SomeClass { private static void Some() { using (var stopWatch = new StopWatch()) { // Do something for (int i = 0; i < 1000; i++) { Thread.Sleep(1); } } } } 

在获得Elapased时间之前,您应该停止秒表

 static void Main() { // Create new stopwatch Stopwatch stopwatch = new Stopwatch(); // Begin timing stopwatch.Start(); // Do something for (int i = 0; i < 1000; i++) { Thread.Sleep(1); } // Stop timing stopwatch.Stop(); // Write result Console.WriteLine("Time elapsed: {0}", stopwatch.Elapsed); }