How to measure function execution time in Pascal

3 Answers

0 votes
// Measuring execution time using GetTickCount

program MeasureTime;

uses
  SysUtils;  // On Linux: SysUtils, On Windows: Windows;

procedure Work;
var
  i: LongInt;
  sum: Int64;
begin
  sum := 0;
  for i := 1 to 100000000 do
    sum := sum + i;
end;

var
  startMS, endMS: QWord;
  elapsedMS: QWord;
  seconds: Double;

begin
  // Record start time in milliseconds
  startMS := GetTickCount64;

  Work;

  // Record end time
  endMS := GetTickCount64;

  elapsedMS := endMS - startMS;
  seconds := elapsedMS / 1000.0;

  WriteLn('Execution time: ', elapsedMS, ' ms');
  WriteLn('Execution time: ', seconds:0:6, ' seconds');
end.



(* 
run:

Execution time: 198 ms
Execution time: 0.198000 seconds

*)

 



answered 7 hours ago by avibootz
0 votes
// Measuring execution time using Now and Milliseconds

program MeasureTime;

uses
  SysUtils, DateUtils;

procedure Work;
var
  i: LongInt;
  sum: Int64;
begin
  sum := 0;
  for i := 1 to 100000000 do
    sum := sum + i;
end;

var
  startTime, endTime: TDateTime;
  elapsedMS: Int64;
  seconds: Double;

begin
  // Record start time
  startTime := Now;

  Work;

  // Record end time
  endTime := Now;

  elapsedMS := MilliSecondsBetween(endTime, startTime);
  seconds := elapsedMS / 1000.0;

  WriteLn('Execution time: ', elapsedMS, ' ms');
  WriteLn('Execution time: ', seconds:0:6, ' seconds');
end.



(* 
run:

Execution time: 180 ms
Execution time: 0.180000 seconds

*)

 



answered 7 hours ago by avibootz
0 votes
// Measuring function execution time in Free Pascal using a reusable Timer (milliseconds + seconds)

program MeasureTimeWithReusableTimer;

{$mode objfpc}{$H+}

uses
  SysUtils;

// ---------------------------
// Reusable Timer definition
// ---------------------------
type
  TTimer = record
    StartMS: QWord;
    EndMS: QWord;
  end;

// Start the timer
procedure TimerStart(var T: TTimer);
begin
  T.StartMS := GetTickCount64;
end;

// Stop the timer
procedure TimerStop(var T: TTimer);
begin
  T.EndMS := GetTickCount64;
end;

// Return elapsed time in milliseconds
function TimerElapsedMilliseconds(const T: TTimer): QWord;
begin
  Result := T.EndMS - T.StartMS;
end;

// Return elapsed time in seconds
function TimerElapsedSeconds(const T: TTimer): Double;
begin
  Result := (T.EndMS - T.StartMS) / 1000.0;
end;

// ---------------------------
// Function to measure
// ---------------------------
procedure Work;
var
  i: LongInt;
  sum: Int64;
begin
  sum := 0;
  for i := 1 to 100000000 do
    sum := sum + i;
end;

// ---------------------------
// Main program
// ---------------------------
var
  T: TTimer;
  ms: QWord;
  sec: Double;

begin
  TimerStart(T);
  Work;
  TimerStop(T);

  ms := TimerElapsedMilliseconds(T);
  sec := TimerElapsedSeconds(T);

  WriteLn('Execution time: ', ms, ' ms');
  WriteLn('Execution time: ', sec:0:6, ' seconds');
end.



(* 
run:

Execution time: 196 ms
Execution time: 0.196000 seconds

*)

 



answered 2 hours ago by avibootz
...