2

.NET アプリケーションで非常に正確なタイミングにアクセスする必要があります。

マイクロ秒の精度が必要です。

.NET でこれを行う簡単な方法はありますか?

4

6 に答える 6

6

System.Diagnostics.Stopwatchは、タイミングのこの程度の粒度に適したクラスですが、2 つの異なるものであるため、プロパティのElapsed.Ticks代わりに Stopwatch オブジェクトのプロパティを使用するようにしてください。ElapsedTicks

  • ElapsedTicksStopwatch.Frequency(ドットなし) はストップウォッチの目盛りの数を表すため、経過時間を計算するには (すべてのマシンで同じではありません) と組み合わせて使用​​する必要があります。
  • Elapsed.Ticks(ドット付きTimespan) はティック数を示し、ストップウォッチの周波数には依存しません。

これはおそらく、.Net で発生する可能性のある最も微妙なエラーの 1 つです。

また、Stopwatch非常に詳細ですが、必ずしも正確であるとは限りません(用語の定義によって異なります)。Stopwatch によって返される経過時間は、システム時間からずれてしまう傾向があります。

私のラップトップでは、ストップウォッチは 24 時間にわたってほぼ 5 秒進んでいますが、この影響は他のマシンではさらに悪いものです。

もちろん、短い期間のタイミングを計っている場合、この効果はまったく問題になりません。

于 2009-10-13T21:28:13.907 に答える
4

Stopwatchクラスはあなたが得ることができる最高の精度であり、高頻度タイマーを使用しています。
ストップウォッチの頻度は CPU の頻度に依存しますが、通常は 1 秒あたり数百万回の範囲です。

CPU が高頻度タイマーを提供しない場合、クラスは 1 秒あたり 100 ~ 50 回の範囲にあるシステム タイマーにフォールバックします。

于 2009-10-13T21:01:30.013 に答える
3

Stopwatchクラスを使用すると、うまくいくはずです。

于 2009-10-13T21:01:42.690 に答える
2

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

于 2009-10-13T21:01:42.057 に答える
1

System.Diagnostics.StopWatchに加えて、次のリンクも確認してください: The Multimedia Timer for the .NET Framework。HTH

于 2009-10-13T21:05:39.523 に答える
0

StopWatch、PerformanceCounters、および他のすべての実装よりもわずかに正確に機能し、Platform Invoke などを必要としないメソッドを見つけました。

https://stackoverflow.com/questions/15725711/obtaining-microsecond-precision-using-net-without-platform-invokeを参照してください

他に見つけたら教えてください!

于 2013-03-31T04:31:17.070 に答える