24.9日
読み:にじゅうよんてんきゅうにち
外語:24.9days
起動直後から経過時間を計測しているタイマーが
オーバーフロー
する日数の一つ。
目次
概要
特徴
現象
.NET Framework
概要
signed
で32ビットの場合、最大で0x7fffffff(10進数で2147483647)までを扱うことができる。
これを1ミリ秒単位で扱うと、2147483647ミリ秒、つまり24日20時間31分23秒647ミリ秒(約24.9日)までを扱えることになるが、これを超えるとオーバーフローする。
特徴
現象
起動後に0からカウントを始めたとすると、この時間が過ぎた時にタイマーイベントは誤動作を始め、システムは、停止したり誤動作をする。
従って、この問題のあるシステムでは、24.9日(3.5週間)を超えた連続稼動が出来ない。
.NET Framework
.NET Framework
は、Environment.TickCount プロパティという、コンピューターが起動してからの経過時間をミリ秒単位で保持する32ビット符号付き整数を提供している。次のように遷移する。
0 から始まる
0x7fffffff == 2147483647 == Int32.MaxValue まで増える (
このときが24.9日
)
0x80000000 == -2147483648 == Int32.MinValue になる (
負数になる
)
0xffffffff == -1 になる
0 に戻る
従って、これを用いているアプリケーションは、24.9日以上の連続運用ができない。
なお、.NET Framework 4.5 からは DateTime.Ticks プロパティが追加され、この問題は解決された。
再検索