Stopwatchクラス - 処理時間の計測

処理時間を計るのに、今までSystem.Environment.TickCountや(全然精度のいらないものに関しては)DateTime.Nowで取得した値の差分を使ってたんだけど、もうちょっとクールな方法はないかな*1、ってことで調べてみた。

処理時間を正確に計測するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/412stopwatch/stopwatch.html

詳しくは@ITの記事を見て頂くとして、.NET2.0からStopwatchクラスなるものがあるようでこれを使ってやると良さげ。内部で、精度の高いQueryPerformanceCounter関数を使ってるようだし、今後はこれ一本でいっかなと。

とここで、話は脇道にそれて。以前Athlon64X2でCPU内のタイマかなにかがずれるって話があったなぁと思い出した。で、Stopwatchクラスはその影響受けないのか気になったのでその問題について調べてみた。

AMD Dual-Core Optimizer
http://d.hatena.ne.jp/NyaRuRu/20060705/p1

ありがたいことに、ピンポイントなまとめ記事発見。自分が"タイマかなにか"と思ってたのはRDTSCのことだったようで。QueryPerformanceCounter関数は、RDTSCそのものではないようで問題なさげ。当然QueryPerformanceCounter関数使ってるStopwatchクラスも問題ないだろうってことで終了。

*1:単なる気まぐれ。特に必要性があって調べたわけではないです。