3

.NET BCL プロパティの Environment.TickCount がどのように実装されているか興味があります。特に、システム時間の調整の影響を受ける場合は、今すぐにしたいと思います。

プロパティがどのように実装されているかについて私が最初に推測したのは、これは単なるGetTickCount メソッドのマネージ ラッパーであるということでした。ただし、GetTickCountメソッドのドキュメントには、GetSystemTimeAdjustment 関数による調整の影響を受けると記載されていますが、 Environment.TickCountのドキュメントには時間調整については何も記載されていません。

Environment.TickCount を(精度は低いですが)一貫して増加する時間値として使用できるかどうかを調べようとしています。

4

2 に答える 2

4

いいえ、Environment.TickCountシステム時刻の調整による影響はありません。これがドキュメントの私の解釈でしたが、私の好奇心はより厳しい証明を要求したため、システムを 1 時間前後に調整しながら次のコードを実行しました。

while (true)
{
    Console.WriteLine(Environment.TickCount);
    Thread.Sleep(1000); 
}

...そして出力は、時間調整の影響を受けない完璧なシーケンスを示しました。

更新
だから、下のコメントでマーカスの質問をきっかけに、さらに宿題をしました。GetTickCountEnvironment.TickCount がドキュメントに次のように記載されている呼び出しを行うことは確かです (確認できませんでしたが) 。

GetTickCount 関数の分解能は、システム タイマーの分解能に制限されており、通常は 10 ミリ秒から 16 ミリ秒の範囲です。GetTickCount 関数の解像度は、GetSystemTimeAdjustment 関数による調整の影響も受けます。

そのため、システム時刻の変更による影響はありませんが、 への呼び出しによる調整の影響を受けるようですSetSystemTimeAdjustment

于 2009-12-07T10:11:09.767 に答える
2

いいえ、システム時刻の調整による影響はありません。

「一貫して増加する時間値」に適しているかどうかは、正確な要件によって異なります。MSDN ドキュメントから:

このプロパティの値は、システム タイマーから取得され、32 ビットの符号付き整数として格納されます。したがって、システムが継続的に実行 されている場合、は約 24.9 日間TickCountゼロから増加し 、負の数である にジャンプし、次の 24.9 日間でゼロに戻ります。Int32.MaxValueInt32.MinValue

于 2009-12-07T10:11:08.723 に答える