7

私がStopwatch自分のコードで実行していて、途中で他のアプリケーションがシステムクロックを変更したとしましょう(サーバーのドメイン時間が毎秒同期しています)。

ストップウォッチの結果に影響しますか?

4

3 に答える 3

8

場合によります。

StopwatchWin32 QueryPerformanceCounter() は、使用可能な場合にのみ依存します。この実装は時間変更に耐性があります。

高解像度のカウンターが利用できない場合は、Stopwatchシステムタイマーにフォールバックし、基本的にDateTime.UtcNow.Ticks呼び出します。この不幸なケースStopwatchでは、結果は時間(タイムゾーンではなく)の変更の影響を受けます。

引用されたMSDNの記事に書かれているように、フィールドを使用して高解像度のカウンターが使用可能かどうかを確認できIsHighResolutionます。

あなたはこれを使って.Netチームを非難することができます欠陥を修正しません:)

于 2015-01-09T15:52:25.580 に答える
5

いいえ、内部的にStopwatchは、システムクロックに関連付けられていないWin32 QueryPerformanceCounter()に依存しています。

于 2012-12-29T07:08:41.257 に答える
1

いいえ、影響はありません。

MSDNから:

ストップウォッチは、基礎となるタイマーメカニズムのタイマーティックをカウントすることで経過時間を測定します。インストールされているハードウェアとオペレーティングシステムが高解像度のパフォーマンスカウンターをサポートしている場合、Stopwatchクラスはそのカウンターを使用して経過時間を測定します。それ以外の場合、Stopwatchクラスはシステムタイマーを使用して経過時間を測定します。FrequencyフィールドとIsHighResolutionフィールドを使用して、ストップウォッチタイミング実装の精度と解像度を決定します。

于 2012-12-29T07:18:34.640 に答える