私はDelphiで関数に費やされた時間を計算する方法を知りたいと思います。関数の経過時間を計算する方法は?
次に、使用時間を表示し、別の機能またはコンポーネントと比較して、より高速な機能を知りたいと考えました。
私はDelphiで関数に費やされた時間を計算する方法を知りたいと思います。関数の経過時間を計算する方法は?
次に、使用時間を表示し、別の機能またはコンポーネントと比較して、より高速な機能を知りたいと考えました。
あなたは、システムの高分解能パフォーマンスカウンタを使用して経過時間を計測するSystem.Diagnostics
ユニットからTStopwatch
を使用することができます。
var
Stopwatch: TStopwatch;
Elapsed: TTimeSpan;
....
Stopwatch := TStopwatch.StartNew;
DoSomething;
Elapsed := Stopwatch.Elapsed;
は、秒単位で時間値を読み取るには、たとえば、時間間隔から、次の操作を行います。
var
Seconds: Double;
....
Seconds := Elapsed.TotalSeconds;
あなたはQueryPerformanceCounter
とQueryPerformanceFrequency
機能を使用することができます。
var
c1, c2, f: Int64;
begin
QueryPerformanceFrequency(f);
QueryPerformanceCounter(c1);
DoSomething;
QueryPerformanceCounter(c2);
// Now (c2-c1)/f is the duration in secs of DoSomething
VAR iFrequency, iTimerStart, iTimerEnd: Int64;
procedure TimerStart;
begin
if NOT QueryPerformanceFrequency(iFrequency)
then MesajWarning('High resolution timer not availalbe!');
WinApi.Windows.QueryPerformanceCounter(iTimerStart);
end;
function TimerElapsed: Double; { In miliseconds }
begin
QueryPerformanceCounter(iTimerEnd);
Result:= 1000 * ((iTimerEnd - iTimerStart)/ifrequency);
end;
function TimerElapsedS: string; { In seconds/miliseconds }
begin
if TimerElapsed < 1000
then Result:= Real2Str(TimerElapsed, 2)+ ' ms'
else Result:= Real2Str(TimerElapsed/1000, 2)+ ' s';
end;
を疑問に取り組むためのより多くの可能性を持つために、あなたは可能性もSystem.Classes.TThread.GetTickCount
を使用して、現在の時間をミリ秒単位で取得してから、メソッドの前にタイマーを開始し、その後メソッドを再実行してください。これらの2つの違いは明らかに経過時間(ミリ秒単位)です。
TStopwatch
のDavid Heffernanの提案はよりエレガントであり、より正確です。
可能な重複、['ルーチンの速度を計算する '](http://stackoverflow.com/q/6030586/576719)。 –
間違いなく別の候補:[Delphi - 開始/停止機能でミリ秒単位またはナノ秒単位でタイマを作成する方法は?](http://stackoverflow.com/questions/14834534/delphi-how-to-make-timer-in -milliseconds-or-nanoseconds-with-start-stop-functi) – Glenn1234