プロシージャ単位、もしくは処理の一塊で、どのくらい処理時間がかかっているか
計測をしたいと思っています。処理時間を計測するコンポーネントとかあるのでしょうか?
時間についてのコンポーネントでTimerを調べたのですが、時間をあらかじめ設定しコンポーネント等を起動させるものとヘルプに載っていたので計測するとはまた違うと思いました。
例えば以下のFor文の開始と終了までの処理時間を調べたい場合
//開始----------------
For i:=0 to 10 do ↑
begin
A:=1; この区間の時間を計測したい
end; ↓
//終了----------------
どの程度の精度で時間の測定が必要でしょうか?
秒単位でいいなら、開始と終了の場所にwrite(DateTimeToStr(Now))を埋め込むだけで、表示を見て自分で引き算すればOKです。
t1,t2:Longint;
t1 := GetTickCount;
for i := 0 to ..........
begin
:
:
end;
t2 := GetTickCount;
Memo1.Lines.add(FloattoStr((t2-t1)/1000)+'s');
こんな感じでどうでしょ?
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によって使えませんが、、
忘れてた。↑のは単位:ミリ秒
Delphi4 以降であれば、拙作のものがお役に立てるかもしれません。
http://www.sadoyama.pro.nu/htm/programing.htm
これも QueryPerformanceCounter() を使っています。
通りすがりさん Wrote
> CPUによって使えませんが
そういう説を聞いたことがあります。
MSDN にもそのような記述があります。
しかし、マルチCPU 以外においては問題ないと判断しています。
コンポーネントでもよければ,
http://www003.upp.so-net.ne.jp/sadoyama/htm/compo/stopwatch.htm
なのもあります.
ありがとうございます。上手く計測できました。
ツイート | ![]() |