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によると:
典型的なストップウォッチシナリオでは、Startメソッドを呼び出しますそして最終的にStopメソッドを呼び出しますし、Elapsedプロパティを使用して経過時間を確認します。
タイマーインスタンスに興味がなくなったときにこのメソッドを呼び出す必要があるかどうかはわかりません。 Stop
メソッドを使用して「クリア」する必要がありますか?
[〜#〜] edit [〜#〜]
Logger.Log(..)はtimer.Elapsed
が読み取られますbeforeロガーのログ。
いいえ、停止する必要はありません。 Stop()
は、経過時間の追跡を停止するだけです。リソースを解放しません
いいえ、停止またはクリーンアップする必要はありません。
Stopwatch
は、アンマネージリソースを使用しません(IDisposable
を考えている場合)。実際にはanyリソースを使用しません(もちろん、オブジェクト自体が使用するメモリを除く)!
.NETのWindows実装(完全な.NET Framework、Mono、.NET Core)では、必要に応じて QueryPerformanceCounter()
Windows APIを呼び出します(Start()
およびStop()
およびElapsed
)を読み取り、高解像度タイムスタンプを取得する場合。
Monoおよび.NET CoreのLinux実装では、 clock_gettime
関数は、単調に増加する時間値を取得します。
実装の詳細について本当に好奇心がある人には: this post を読んでください。
Elapsed値を再利用したい場合、Stopは便利だと思います。