私がStopwatch
自分のコードで実行していて、途中で他のアプリケーションがシステムクロックを変更したとしましょう(サーバーのドメイン時間が毎秒同期しています)。
ストップウォッチの結果に影響しますか?
私がStopwatch
自分のコードで実行していて、途中で他のアプリケーションがシステムクロックを変更したとしましょう(サーバーのドメイン時間が毎秒同期しています)。
ストップウォッチの結果に影響しますか?
場合によります。
Stopwatch
Win32 QueryPerformanceCounter() は、使用可能な場合にのみ依存します。この実装は時間変更に耐性があります。
高解像度のカウンターが利用できない場合は、Stopwatch
システムタイマーにフォールバックし、基本的にDateTime.UtcNow.Ticks
呼び出します。この不幸なケースStopwatch
では、結果は時間(タイムゾーンではなく)の変更の影響を受けます。
引用されたMSDNの記事に書かれているように、フィールドを使用して高解像度のカウンターが使用可能かどうかを確認できIsHighResolution
ます。
あなたはこれを使って.Netチームを非難することができます欠陥を修正しません:)
いいえ、内部的にStopwatchは、システムクロックに関連付けられていないWin32 QueryPerformanceCounter()に依存しています。
いいえ、影響はありません。
MSDNから:
ストップウォッチは、基礎となるタイマーメカニズムのタイマーティックをカウントすることで経過時間を測定します。インストールされているハードウェアとオペレーティングシステムが高解像度のパフォーマンスカウンターをサポートしている場合、Stopwatchクラスはそのカウンターを使用して経過時間を測定します。それ以外の場合、Stopwatchクラスはシステムタイマーを使用して経過時間を測定します。FrequencyフィールドとIsHighResolutionフィールドを使用して、ストップウォッチタイミング実装の精度と解像度を決定します。