Entwickler-Ecke
Sonstiges (Delphi) - Schleifengeschwindigkeit
opfer.der.genauigkeit - Fr 23.05.03 16:56
Titel: Schleifengeschwindigkeit
Gibt es Geschwindigkeitsunterschiede bei:
Quelltext
1: 2:
| for i := 0 to bla.count-1 do 'AUFRUF' |
und
Quelltext
1: 2: 3:
| for i := 0 to bla.count-1 do begin 'AUFRUF' end; |
???
Wenn ja, wirkt sich das bei allen Sachen aus?
Also bei ner IF- Abfrage, Whileschleife, Hundekuchen ?
BungeeBug - Fr 23.05.03 17:13
Hi,
noe ... zumindest keinene Merkbaren ...
MfG BungeeBug
opfer.der.genauigkeit - Fr 23.05.03 17:18
Gut, daß man das als Mensch nich merkt hab ich auch beim Programmieren gemerkt. :wink:
Hat jemand vielleicht ne genaue Zahl?
AndyB - Fr 23.05.03 18:38
begin und
end sind nur für den Compiler von Interesse, damit er weiß, wo ein Block beginnt und wo er aufhört. Im Maschinencode wirst du sie nicht wieder finden, womit keine Geschwindigkeitsunterschiede auftreten.
Quelltext
1:
| for i := 0 to 10 do Something; |
erzeugt Haar genau den selben Maschinencode wie
Quelltext
1: 2: 3: 4:
| for i := 0 to 10 do begin Something; end; |
UGrohne - Fr 23.05.03 18:47
Die Geschwindigkeit von Schleifen ist sowieso eine Sache für sich. Diese genau zu bestimmen ist eigentlich unmöglich und eine Schleife schneller zu machen ist genauso schwer.
Vor kurzem haben wir das Thema in Info durchgenommen und in Java die Laufzeit von 2 Schleifen gemessen. Komischerweise war irgendwann die 2. 5mal langsamer, als die erste, obwohl sie total gleich und völlig unabhängig voneinander waren. Hängst also auch vom Compiler ab, ob ein Code wirklich schnell ist.... :(
FriFra - Sa 24.05.03 10:27
Schleifen lassen sich schon "beschleunigen", wenn man bei bestimmten Aufgaben, wo man z.B. nur bis zu einem bestimmten Punkt durch die Schleife laufen muss "break" verwendet.
Klabautermann - Sa 24.05.03 13:03
Titel: Re: Schleifengeschwindigkeit
Hallo,
also wenn du Zahlschleifen beschleunigen willst, dann lasse sie rückwärts laufen. Da in Assembler nur auf 0 abgeprüft werden kann, muss bei hochzähleneden Schleifen auf das Ergebnis einer Rechnung die beim erreichren des Endwertes null ergibt geprüft werden muss.
Bei einfachen sachen wie z.B.
Delphi-Quelltext
1: 2:
| for i := 0 to bla.count-1 do Machwas; |
Optimiert Delphi das von alleine so, dass die Schleife rückwärts läuft. Wenn aber in der Schleiffe auch die Zählvariable verwendet wird und Delphi somit nicht mehr entscheiden kann, ob ein ändern der Laufrichtung nicht die Funktion des Programmes beeinflusst, lässt es dir Finger davon.
Sofern es also möglich ist lasse deine Schleife in die andere Richtung laufen
Delphi-Quelltext
1: 2:
| for i := bla.count-1 downto 0 do Machwas; |
Gruß
Klabautermann
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!