Я хотел бы знать, как рассчитать время, затрачиваемое на функцию в Delphi.
Затем я хотел показать использованное время и сравнить его с другой функцией или компонентом, чтобы узнать более быструю функцию.
Я хотел бы знать, как рассчитать время, затрачиваемое на функцию в Delphi.
Затем я хотел показать использованное время и сравнить его с другой функцией или компонентом, чтобы узнать более быструю функцию.
Вы можете использовать TStopwatch
из блока System.Diagnostics
для измерения прошедшего времени с помощью счетчика производительности с высоким разрешением системы.
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
, чтобы получить текущее время в миллисекундах, чтобы запустить ваш таймер перед вашим методом, а затем снова после вашего метода. Разница между этими двумя - это, очевидно, истекшее время в миллисекундах, которое вы могли бы преобразовать в часы, секунды и т.д.
Сказав это, предложение Дэвида Хеффернана с TStopwatch
более элегантно (и точнее?).