1. ホーム
  2. c#

[解決済み] DateTime.Nowは関数のパフォーマンスを測定するのに最適な方法ですか?[クローズド]

2022-03-20 19:29:30

質問

ボトルネックを見つけたいので、できるだけ正確に時間を計測してほしい。

次のコードスニペットは、パフォーマンスを測定するのに最適な方法ですか?

DateTime startTime = DateTime.Now;

// Some execution process

DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);

解決方法は?

いいえ、そんなことはありません。を使用します。 ストップウォッチ System.Diagnostics )

Stopwatch sw = Stopwatch.StartNew();
PerformWork();
sw.Stop();

Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);

ストップウォッチは、高精度なタイマーの存在を自動的にチェックします。

特筆すべきは DateTime.Now よりもかなり遅くなることが多い。 DateTime.UtcNow タイムゾーンを扱う必要があるためです。 サマータイム といった具合です。

DateTime.UtcNowは通常15msの分解能を持っています。参照 John Chapmanのブログ記事 について DateTime.Now の精度は、素晴らしい要約です。

面白いトリビア:ストップウォッチがフォールバックするのは DateTime.UtcNow ハードウェアが高周波カウンターをサポートしていない場合。Stopwatchが高精度を実現するためにハードウェアを使用しているかどうかは、静的フィールドを見ることで確認することができます ストップウォッチ.IsHighResolution .