Zitat von
Popov:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i, x: Integer;
Start, Ende, Zeit: TDateTime;
begin
x := 0;
Start := Now;
for i := 0 to 2147483647 do
begin
(*Variante 1: Hier wird der Wert nur ein einziges Mal übergeben*)
if i = 0 then x := i;
(*Variante 2: Hier wird der Wert jedes Mal übergeben*)
//x := i;
end;
Ende := Now;
Zeit := Ende - Start;
ShowMessage('Fertig bei x = ' + IntToStr(x) + ^j + 'Dauer: ' + TimeToStr(Zeit));
end;
Hab mal schnell etwas gebastelt. Es geht zwar genauer, aber für grobe Berechnung reicht es.
Laut der Routine dauert es doppelt so lange bei 2147483647 Abfragen und nur einer Zuweiseung, als wenn der Wert 2147483647 Mal übergeben wird.
tja, das beispiel ist so gewählt, dass man sich die abfrage schenken kann, sie ist redundant. daher ist es nicht verwunderlich, dass der compi länger braucht, muss ja zwei mal den speicherzugriff machen.
aber normal ist es so, dass z.b. nicht nur 'ne seicherstelle gesetzt wird, mit der der processor prima umgehen kann (integer), sondern etwas complexeres... z.b. byte, string, record, objekt... und da sind die kosten der zuweisung höher, als für den vergleich.
ausserdem, kann man in einer solchen abfrage auch noch zusätzliche funktionen durchführen, z.b. 'n modified flag setzen... und hier ist es dann wichtig, dass das nicht immer gesetzt wird, sondern nur, wenn sich wirklich etwas geändert hat.