C# DateTime.Now の精度の制限を理解する
問題:
DateTime.Now
/UtcNow
が一見不正確に見えるタイムスタンプを返し、複数のミリ秒間隔にわたって同じ値を示すことが多いのはなぜですか? DateTime.Now
の精度は明示的に定義されていますか?
答え:
DateTime
は高精度の時間計測を目的としたものではありません。その中心機能は、ユーザー インターフェイスや日付ベースの計算などの一般的なアプリケーションの日付と時刻の表現と操作です。
技術詳細:
精度と精度は異なります。時計は正確である (測定間隔が一貫している) 場合もありますが、不正確である (基準時間ソースからずれている) 場合もあります。 ほとんどのシステムは十分に正確な時間信号にアクセスできないため、DateTime
でマイクロ秒の精度を提供することは欺瞞的です。
影響:
DateTime.Now
は本質的に不正確であるため、高精度のタイミングが要求されるシナリオには適していません。 このようなタスクでは、Stopwatch
クラスの方がはるかに優れています。 DateTime
は、現在時刻の表示や時差の計算など、一般的な日付と時刻の操作に十分な精度を提供します。
例:
このコードは、時間測定における DateTime.Now
と Stopwatch
の違いを強調表示します。
<code class="language-csharp">using System; using System.Diagnostics; public class Program { public static void Main(string[] args) { var stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < 1000; i++) { Console.WriteLine($"DateTime.Now: {DateTime.Now.Millisecond}, Stopwatch: {stopwatch.ElapsedMilliseconds}"); // Add a small delay (adjust as needed) System.Threading.Thread.Sleep(1); } stopwatch.Stop(); } }</code>
これは、DateTime.Now
が短期間に同じミリ秒値を繰り返し出力する可能性があるのに対し、Stopwatch
はより詳細な経過時間の測定を提供することを示しています。
以上がC# DateTime.Now の精度が予想より低いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。