関数のベンチマーク、時間測定
|
91 |
FunctionBenchMark |
動作確認 |
Delphi2007 |
更新日 |
2008/10/17(金) |
特定の関数の処理時間を測定してベンチマークを行いたいとき
TTimerやGetTichCountは遅いので高精度カウンタAPIをつかいます。
Win9x系では誤差が出てしまうことが多いので
WinNTや2000以降で動作確認するとよいでしょう。
1mSecよりも細かく計算できます。
下記のように書くと
BenchmarkProcedure に手続きを渡すとその動作時間を返してくれます。
────────────────────
//uses Windows; が必要
//処理時間を秒単位で返します
function BenchmarkProcedure(proc: TProcedure): Double;
var
Frequency, CountStart, CountEnd: Int64;
begin
QueryPerformanceFrequency(Frequency);
QueryPerformanceCounter(CountStart);
proc;
QueryPerformanceCounter(CountEnd);
Result := (CountEnd - CountStart) / Frequency;
end;
procedure SampleProc;
begin
Sleep(1000);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add( FloatToStr( BenchmarkProcedure(SampleProc) ) );
//0.99621125031254 が出力される
end;
────────────────────
CUIアプリでも問題なく出力できます。
|