.NET アプリケーションで非常に正確なタイミングにアクセスする必要があります。
マイクロ秒の精度が必要です。
.NET でこれを行う簡単な方法はありますか?
System.Diagnostics.Stopwatchは、タイミングのこの程度の粒度に適したクラスですが、2 つの異なるものであるため、プロパティのElapsed.Ticks
代わりに Stopwatch オブジェクトのプロパティを使用するようにしてください。ElapsedTicks
ElapsedTicks
Stopwatch.Frequency
(ドットなし) はストップウォッチの目盛りの数を表すため、経過時間を計算するには (すべてのマシンで同じではありません) と組み合わせて使用する必要があります。Elapsed.Ticks
(ドット付きTimespan
) はティック数を示し、ストップウォッチの周波数には依存しません。
これはおそらく、.Net で発生する可能性のある最も微妙なエラーの 1 つです。
また、Stopwatchは非常に詳細ですが、必ずしも正確であるとは限りません(用語の定義によって異なります)。Stopwatch によって返される経過時間は、システム時間からずれてしまう傾向があります。
私のラップトップでは、ストップウォッチは 24 時間にわたってほぼ 5 秒進んでいますが、この影響は他のマシンではさらに悪いものです。
もちろん、短い期間のタイミングを計っている場合、この効果はまったく問題になりません。
Stopwatch
クラスはあなたが得ることができる最高の精度であり、高頻度タイマーを使用しています。
ストップウォッチの頻度は CPU の頻度に依存しますが、通常は 1 秒あたり数百万回の範囲です。
CPU が高頻度タイマーを提供しない場合、クラスは 1 秒あたり 100 ~ 50 回の範囲にあるシステム タイマーにフォールバックします。
Stopwatchクラスを使用すると、うまくいくはずです。
Stopwatchクラスは、精度が高いため、最適なオプションです。
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
例:
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6167361.html
System.Diagnostics.StopWatchに加えて、次のリンクも確認してください: The Multimedia Timer for the .NET Framework。HTH
StopWatch、PerformanceCounters、および他のすべての実装よりもわずかに正確に機能し、Platform Invoke などを必要としないメソッドを見つけました。
https://stackoverflow.com/questions/15725711/obtaining-microsecond-precision-using-net-without-platform-invokeを参照してください
他に見つけたら教えてください!