Tôi muốn biết cách tính thời gian cho một hàm trong Delphi.Cách tính thời gian trôi qua của một hàm?
Sau đó, tôi muốn hiển thị thời gian đã sử dụng và so sánh nó với một hàm hoặc thành phần khác để biết hàm nhanh hơn.
Tôi muốn biết cách tính thời gian cho một hàm trong Delphi.Cách tính thời gian trôi qua của một hàm?
Sau đó, tôi muốn hiển thị thời gian đã sử dụng và so sánh nó với một hàm hoặc thành phần khác để biết hàm nhanh hơn.
Bạn có thể sử dụng TStopwatch
từ các đơn vị System.Diagnostics
để đo thời gian trôi qua sử dụng của hệ thống có độ phân giải cao hiệu suất truy cập.
var
Stopwatch: TStopwatch;
Elapsed: TTimeSpan;
....
Stopwatch := TStopwatch.StartNew;
DoSomething;
Elapsed := Stopwatch.Elapsed;
Để đọc một giá trị thời gian trong vài giây, nói, từ một khoảng thời gian, làm việc này:
var
Seconds: Double;
....
Seconds := Elapsed.TotalSeconds;
Bạn có thể sử dụng các chức năng QueryPerformanceCounter
và 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;
Vì lợi ích của việc có khả năng hơn để giải quyết những câu hỏi, bạn cũng có thể sử dụng System.Classes.TThread.GetTickCount
để nhận thời gian hiện tại tính bằng mili giây để bắt đầu hẹn giờ trước phương pháp của bạn, và sau đó lại sau phương pháp của bạn. Sự khác biệt giữa hai điều này rõ ràng là thời gian trôi qua tính bằng mili giây, mà bạn có thể chuyển thành giờ, giây, v.v.
Có đề xuất của David Heffernan là thanh lịch hơn (và chính xác hơn).
Có thể trùng lặp, ['Tính tốc độ của các thường trình?'] (Http://stackoverflow.com/q/6030586/576719). –
Chắc chắn là một bản sao, một ứng cử viên khác: [Delphi - Làm thế nào để làm cho bộ đếm thời gian tính bằng mili giây hoặc nano giây với chức năng khởi động/dừng?] (Http://stackoverflow.com/questions/14834534/delphi-how-to-make-timer-in -milliseconds-hoặc-nano giây-với-start-stop-functi) – Glenn1234