web-dev-qa-db-ja.com

メソッドの最後でストップウォッチを停止する必要がありますか?

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ロガーのログ。

67
Dariusz

いいえ、停止する必要はありません。 Stop()は、経過時間の追跡を停止するだけです。リソースを解放しません

58
Uriil

いいえ、停止またはクリーンアップする必要はありません。

Stopwatchは、アンマネージリソースを使用しません(IDisposableを考えている場合)。実際にはanyリソースを使用しません(もちろん、オブジェクト自体が使用するメモリを除く)!

.NETのWindows実装(完全な.NET Framework、Mono、.NET Core)では、必要に応じて QueryPerformanceCounter() Windows APIを呼び出します(Start()およびStop()およびElapsed)を読み取り、高解像度タイムスタンプを取得する場合。

Monoおよび.NET CoreのLinux実装では、 clock_gettime 関数は、単調に増加する時間値を取得します。

実装の詳細について本当に好奇心がある人には: this post を読んでください。

25

Elapsed値を再利用したい場合、Stopは便利だと思います。

3
vvv