処理時間の計測方法

解決


リュウ  2004-09-17 02:10:46  No: 10946  IP: [192.*.*.*]

プロシージャ単位、もしくは処理の一塊で、どのくらい処理時間がかかっているか
計測をしたいと思っています。処理時間を計測するコンポーネントとかあるのでしょうか?
時間についてのコンポーネントでTimerを調べたのですが、時間をあらかじめ設定しコンポーネント等を起動させるものとヘルプに載っていたので計測するとはまた違うと思いました。

例えば以下のFor文の開始と終了までの処理時間を調べたい場合

//開始----------------
For i:=0 to 10 do    ↑
begin
 A:=1;                この区間の時間を計測したい
end;                  ↓
//終了----------------

編集    削除
WIZ  2004-09-17 02:28:48  No: 10947  IP: [192.*.*.*]

どの程度の精度で時間の測定が必要でしょうか?
秒単位でいいなら、開始と終了の場所にwrite(DateTimeToStr(Now))を埋め込むだけで、表示を見て自分で引き算すればOKです。

編集    削除
ウォレス  2004-09-17 02:38:05  No: 10948  IP: [192.*.*.*]

t1,t2:Longint;

  t1 := GetTickCount;
  for i := 0 to ..........  
  begin
     :
     :
  end;
  t2 := GetTickCount;

  Memo1.Lines.add(FloattoStr((t2-t1)/1000)+'s');

こんな感じでどうでしょ?

編集    削除
通りすがり  2004-09-17 02:42:26  No: 10949  IP: [192.*.*.*]

var 
  start,fin,freq : int64;
begin
  QueryPerformanceCounter(start);

  for i := 0 to ..........  
  begin
     :
     :
  end;

  QueryPerformanceCounter(fin);
  QueryPerformanceFrequency(freq);
  InputBox('','',FloatToStr(((fin - start)*1000)/freq));
end;
とか、、、CPUによって使えませんが、、

編集    削除
通りすがり  2004-09-17 02:49:43  No: 10950  IP: [192.*.*.*]

忘れてた。↑のは単位:ミリ秒

編集    削除
sadoyama  URL  2004-09-17 03:08:17  No: 10951  IP: [192.*.*.*]

Delphi4 以降であれば、拙作のものがお役に立てるかもしれません。
http://www.sadoyama.pro.nu/htm/programing.htm

これも QueryPerformanceCounter() を使っています。

通りすがりさん Wrote
> CPUによって使えませんが

そういう説を聞いたことがあります。
MSDN にもそのような記述があります。
しかし、マルチCPU 以外においては問題ないと判断しています。

編集    削除
Mr.XRAY  URL  2004-09-17 03:10:46  No: 10952  IP: [192.*.*.*]

コンポーネントでもよければ,

http://www003.upp.so-net.ne.jp/sadoyama/htm/compo/stopwatch.htm

なのもあります.

編集    削除
リュウ  2004-09-17 03:14:17  No: 10953  IP: [192.*.*.*]

ありがとうございます。上手く計測できました。

編集    削除