回答受付が終了しました

Visual Studio .net4.0で 現在時間をmsまで取得しコンソールに表示させてみたのですが、 msの値に違和感を感じてしまいます。このような出力になることがあるのでしょうか。

画像

回答(2件)

> このような出力になることがあるのでしょうか。 無くはないです。 出力値のばらつきや間隔はタイマー分解能次第だし、その処理はUIスレッドで動いているので長時間動作する処理には向きません。 ちなみにDateTime.Nowの分解能はシステム依存です。 以下では「0.5 から 15 ミリ秒の間になる傾向」と記載があります。 https://learn.microsoft.com/ja-jp/dotnet/api/system.datetime.now (タイマー分解能を自分で指定することもできます) 1msec以下の分解能があり、UIスレッド以外で記述すれば、同じ値を数十回ずつ返しながらインクリメントしていきます。 以下、タイマー分解能を1msecに指定した場合で、かつミリ秒以下を6桁表示したときの結果です。 09:24:48.404072:99953 09:24:48.404072:99954 09:24:48.404072:99955 09:24:48.405077:99956 09:24:48.405077:99957

NEW! この回答はいかがでしたか? リアクションしてみよう

Windowsの古い仕様で、DateTimeでは tick を元にした精度の時間しかとれません。精度は15.6ミリ秒です。相当荒いです。 Stopwatchだと、マイクロ秒の精度が出ます。

あとは、Windowsは、15.6msごとにタイムスライスします。CPUは、While()のループを15.6msの間、実行した後、別のスレッドを実行します。再度、While()のループを再開しますが、15.6msで別のスレッドに移ります。