の最小解像度がDateTimeミリ秒ではなくティック(100ナノ秒単位)に基づいているのはなぜですか?
5 に答える
TimeSpan些細なことにを追加するDateTimeのと同じTicks作成操作を使用します。TimeSpanDateTime精度が高いほど良いです。主にに役立ちますが
TimeSpan、上記の理由でそれをに転送しDateTimeます。たとえば
StopWatch、ミリ秒より短いことが多い短い時間間隔を測定します。を返すことができTimeSpanます。
私のプロジェクトの1つでは、TimeSpanオーディオサンプルに対処するために使用しました。100nsはそのために十分に短いので、ミリ秒はそうではありません。ミリ秒ティックを使用する場合でも、を表すにはInt64が必要です
DateTime。しかし、0から9999以外の年は実際には役に立たないため、範囲のほとんどを無駄にしています。DateTimeそこで彼らは、9999年を表すことを許可しながら、可能な限り小さいティックを選択しました。100nsで約261.5ティックがあります。タイムゾーン関連のタグ付けには2ビットが必要なため
DateTime、100nsティックは、Int64に適合する最小の10の累乗間隔です。
したがって、より長いティックを使用すると、何も得られずに精度が低下します。短いティックを使用すると、64ビットに適合しません。=> 100nsは、制約が与えられた場合の最適値です。
ほとんどの場合必要ではありませんが、より高い時間分解能が得られます。
情報のためだけに:
1ミリ秒=10000ティック
1秒=10000000ティック
2ティックの差(デルタ)を使用すると、より詳細な精度を得ることができます(後でミリ秒または秒に変換します)
C#のDateTimeコンテキストでは、ティックは0(DateTime.MinValue.Ticks)から始まり、DateTime.MaxValue.Ticks
new DateTime(0) //numbers between 0 and (864*10^9-1) produces same date 01/01/0001
new DateTime(DateTime.MaxValue.Ticks) //MaxValue tick generates 12/31/9999
システム時間ティックは、1日あたり8,640億ティックずつ増加します。
ティックは、システムクロックが機能するものです。