![]() |
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:
Denkt Ihr es ist fair, dass auf diese Art zu vergleichen?
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; Im Anhang der komlette Source und ein ScreenShot. |
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. |
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...
|
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. |
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 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz