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