21

の最小解像度がDateTimeミリ秒ではなくティック(100ナノ秒単位)に基づいているのはなぜですか?

4

5 に答える 5

45
  • 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は、制約が与えられた場合の最適値です。

于 2013-01-19T15:04:25.633 に答える
4

からMSDN;

1つのティックは、100ナノ秒または1000万分の1秒を表します。1ミリ秒に10,000ティックがあります。

ティックは、0001年の1月1日の深夜である現地時間のティックの総数を表します。ただし、ティックも最小単位ですTimeSpan。ティックはInt64であるため、ティックの代わりにミリ秒を使用すると、情報が失われる可能性があります。

CLSまた、デフォルトの実装である可能性があります。

于 2013-01-19T15:00:06.290 に答える
2

ほとんどの場合必要ではありませんが、より高い時間分解能が得られます。

于 2013-01-19T14:56:28.923 に答える
1

情報のためだけに:

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億ティックずつ増加します。

于 2020-07-09T22:12:30.890 に答える
-5

ティックは、システムクロックが機能するものです。

于 2013-01-19T14:56:48.547 に答える