Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi For While Repeat Unterschied in der Geschwindigkeit (https://www.delphipraxis.net/89559-while-repeat-unterschied-der-geschwindigkeit.html)

uwewo 2. Apr 2007 12:44


For While Repeat Unterschied in der Geschwindigkeit
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

habe mir mal Gedanken über die Geschwindigkeitsunterschiede der verschiedenen Schleifen gemacht.

Habe diese mit folgendem Code getestet

Delphi-Quellcode:
procedure TMain.BtnForClick(Sender: TObject);
var Start, Stop, c : TLargeInteger;
    i, x          : Integer;
begin
  QueryPerformanceFrequency(c);
  QueryPerformanceCounter(Start);
  x := 1;

  for i := 1 to 2147483647 do x := x + 1;

  QueryPerformanceCounter(Stop);
  Label1.Caption := Format('Time: %g s',[(Stop-Start)/c]);
end;

//------------------------------------------------------------------------------

procedure TMain.BtnWhileClick(Sender: TObject);
var Start, Stop, c : TLargeInteger;
    i, x          : Integer;
begin
  QueryPerformanceFrequency(c);
  QueryPerformanceCounter(Start);
  x := 1;

  while x < 2147483647 do x := x + 1;

  QueryPerformanceCounter(Stop);
  Label2.Caption := Format('Time: %g s',[(Stop-Start)/c]);
end;

//------------------------------------------------------------------------------

procedure TMain.BtnRepeatClick(Sender: TObject);
var Start, Stop, c : TLargeInteger;
    i, x          : Integer;
begin
  QueryPerformanceFrequency(c);
  QueryPerformanceCounter(Start);
  x := 1;

    repeat
      x := x+1;
    until (x = 2147483647);

  QueryPerformanceCounter(Stop);
  Label3.Caption := Format('Time: %g s',[(Stop-Start)/c]);
end;
Denkt Ihr es ist fair, dass auf diese Art zu vergleichen?

Im Anhang der komlette Source und ein ScreenShot.

matashen 2. Apr 2007 12:47

Re: For While Repeat Unterschied in der Geschwindigkeit
 
Ich denke das die Wahl so mancher Schleife von der Art der Ausführung und Verwendung abhängt und nicht von der Geschwindigkeit.

Aber nette Idee das mal zu testen.

alzaimar 2. Apr 2007 12:48

Re: For While Repeat Unterschied in der Geschwindigkeit
 
Nein, es ist nicht fair. Die For-Schleife zählt I hoch und außerdem X, die While- und Repeat-Schleife dagegen nur X...

uwewo 2. Apr 2007 13:47

Re: For While Repeat Unterschied in der Geschwindigkeit
 
@alzamair
Ok, stimme Dir zu ist nicht ganz fair, alerdings liegt dir For Schleife eh ausser Konkurrenz
da die Enbedingung nicht jedesmal neu geprüft wird.

alzaimar 2. Apr 2007 13:54

Re: For While Repeat Unterschied in der Geschwindigkeit
 
Wat? Stimmt nicht. Die Endbedingung muss doch jedesmal geprüft werden, sonst wäre es eine Endlosschleife. Der Term wird allerdings nur einmal ausgewertet, das ist richtig.

Um die Schleifen irgendwie vergleichen zu können, muss man dann eben soetwas machen:

Var
i : Integer;

...
For i:=0 to ccMaxLoops Do
_DoSomeThing;

i := 0;
While i<= ccMaxLoops do Begin
_DoSomeThing;
inc(i);
End;

i := 0;
Repeat
_DoSomeThing;
inc (i);
Until i = ccMaxLoops;
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz