関数のベンチマーク、時間測定
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アプリでも問題なく出力できます。