2009,08,20 Thursday
仕事でC#上にてミリ秒単位での処理時間の比較を行うことがあり
その時にStopWatchClassを使ったため、以下にメモを残す
まず復習として・・・C言語(Win32API)で最も正確な処理時間は
QueryPerformanceCounter()やQueryPerformanceFrequency()によって計測する。
なお、ミリ秒単位での計測を望まない場合は、このAPIを使う必要は無いが
TimerControl等の精度が低いものによっては100msのIntervalでも誤差が生じるため
状況に応じて使い分ける必要がある。(一番精度の低いものはWM_TIMERで呼び出されるもの
参考URL : MSDN QueryPerformanceFrequency Function()
そして本題であるC#での正確な処理時間を行う場合は
System.Diagnostics内のStopWatch Classを用いる。
但し、.NET Framework 2.0以降である必要がある。
使い方としては、インスタンスを生成し、Start()とStop()でおk(笑
参考URL : MSDN Stopwatchクラス(System.Diagnostics)
簡単すぎる・・・C言語の時の苦労は何処へやら・・・
但し、相変わらずCPUの分解能のサポートは必要らしい。
出力はElapsedMillisecondsメンバ変数によって
ミリ秒単位での経過時間をlong型で取得出来るため、そのまま出力。
SampleCodeを続きに示す。
その時にStopWatchClassを使ったため、以下にメモを残す
まず復習として・・・C言語(Win32API)で最も正確な処理時間は
QueryPerformanceCounter()やQueryPerformanceFrequency()によって計測する。
なお、ミリ秒単位での計測を望まない場合は、このAPIを使う必要は無いが
TimerControl等の精度が低いものによっては100msのIntervalでも誤差が生じるため
状況に応じて使い分ける必要がある。(一番精度の低いものはWM_TIMERで呼び出されるもの
参考URL : MSDN QueryPerformanceFrequency Function()
そして本題であるC#での正確な処理時間を行う場合は
System.Diagnostics内のStopWatch Classを用いる。
但し、.NET Framework 2.0以降である必要がある。
使い方としては、インスタンスを生成し、Start()とStop()でおk(笑
参考URL : MSDN Stopwatchクラス(System.Diagnostics)
簡単すぎる・・・C言語の時の苦労は何処へやら・・・
但し、相変わらずCPUの分解能のサポートは必要らしい。
出力はElapsedMillisecondsメンバ変数によって
ミリ秒単位での経過時間をlong型で取得出来るため、そのまま出力。
SampleCodeを続きに示す。
using System; using System.Diagnostics; namespace StopWatchSample { const int sleepTime = 1000; /// <summary> /// Entry Point /// </summary> public void Main() { // StopWatch Start sw.Start(); // Thread Sleep[ms] System.Threading.Thread.Sleep(sleepTime); // StopWatch Stop sw.Stop(); // ミリ秒単位で出力 long millisec = sw.ElapsedMilliseconds; Console.WriteLine(millisec); // (出力例:998) return; } }
コメント
コメントする
この記事のトラックバックURL
http://wish-star.sytes.net/~gaku/tb.php/147
トラックバック
TOP PAGE △





