Ein beherztes Writeln(x) nach der Schleife und der code ist wieder langsam.
Nicht in 10.3.3 Rio. Da liegen die Werte mit und ohne Writeln(x) annähernd gleichauf.
Übrigens bekomme ich ähnliche Werte, wenn ich den Schleifenbody komplett auskommentiere
Delphi-Quellcode:
program BenchmarkCallSpeed;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.Diagnostics;
function foo(x:integer):integer;
inline;
begin
result:=x*3;
end;
const
Iterations=1000000000;
TestTarget=100;
var
s:
string;
tc:TStopwatch;
i:integer;
itotal:integer;
x:integer;
totalMSecs:Int64;
begin
try
totalMSecs:=0;
tc:=TStopwatch.Create.Create;
Writeln('
Start');
for itotal := 1
to TestTarget
do
begin
x:=3;
tc.Reset;
tc.Start;
for i := 0
to Iterations-1
do
begin
x:=foo(x);
end;
tc.Stop;
totalMSecs := totalMSecs + tc.ElapsedMilliseconds;
Writeln(x);
Writeln('
Step: '+itotal.ToString()+'
= '+tc.ElapsedMilliseconds.ToString()+ '
ms');
end;
Writeln('
TOTAL~: '+(totalMSecs/TestTarget).ToString());
Writeln('
ENDE');
Readln(s);
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
end.