Autor Beitrag
IhopeonlyReader Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 05.09.13 17:57 
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Wo hast Du das aufgeschnappt, dass man nach dem Erzeugen eines Streams die Position auf 0 bzw. den Anfang setzen muss? Hab ich noch nie gesehen, lass mich aber gerne eines Besseren belehren.

ich bin selbstbeibringer und ich habe mich "gezwungen" alles was ich irgendwo erstelle zu initialisieren. Das führt dazu, dass ich z.B. bei einer verketteten liste auch den Pointer vom next auf Nil setzte
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
//Beispiel
NextPart := TNextPart.create;
NextPart.Content := NewContent;
NextPart.Next := Nil//hier aus reiner "Sicherheit"
Tail.Next := NextPart;
Tail := Tail.next;



user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Wenn Du die Rückgabewerte nicht prüfst, ist das zumindest meiner Meinung nach schlechter Programmierstil. Dann nimm lieber ReadBuffer.

Ich habe nun, falls der Rückgabewert ungleich 1 ist dieses "übersprungen".. Fehlermeldungen gib ich ungern aus, da dann meist nicht 1 sondern gefühlte 1000 kommen...
da das Programm nur für mich ist, wird es auch keinen geben, der von fehlenden Fehlermeldungen genervt sein will...

user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Nicht alles, was funktioniert ist gut. Die For-Schleife ist schon in Ordnung. Warum soll aber die For-Schleife schneller sein? Hast Du Beweise dafür?


user profile iconMeierZwoo hat folgendes geschrieben:
WHILE und REPEAT/UNTIL nehmen sich nichts, sind aber (grade beim schnellen Tippseln für einen Zeittest) kritisch, weil die Abbruchbedingung unbedingt erreicht werden muß (Die man ja auch meist nicht hat und nachher nicht weiss, wie oft durchlaufen - es sei denn, man schreibt dies noch zusätzich mit).

Eine FOR Schleife wäre schneller, weil dort nur ein Wert erhöht werden und keine Abbruchbedingung ermittelt werden muß. Außerdem hat man bei FOR gleich den Teiler für die Zeitmessung.
aus dem Thread : www.entwickler-ecke....ewtopic.php?t=111508

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Do 05.09.13 18:39 
Schau Dir doch einfach mal die Online-Hilfe von Delphi an, dort gibt es in der Regel auch Beispiele. Ich müsste wirklich sehr täuschen, wenn es notwendig wäre, die Position auf 0 zu setzen.

Das mit der For-Schleife ist nur eine Behauptung von einer Person, woher weisst Du, dass diese Behauptung stimmt? Im Idealfall vielleicht schon. Achtung, sonst werden wir zu Off-Topic.

Bei einem Fehler in der For-Schleife kannste die Schleife mit Break abbrechen/beenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 05.09.13 22:50 
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Das mit der For-Schleife ist nur eine Behauptung von einer Person, woher weisst Du, dass diese Behauptung stimmt? Im Idealfall vielleicht schon.
Das ist auch so, allerdings ist der Unterschied bei wenigen Durchläufen nicht spürbar. Im Anhang ein Vergleich, die in der Schleife wiederholten Zeilen sind rot markiert.
Man sieht, dass bei der for-Schleife die Initialisierung vorher passiert, so dass dort 4 Assemblerbefehle mehr gebraucht werden als bei der while-Schleife. Dafür werden bei der while-Schleife 2 Assemblerbefehle mehr bei jedem Durchlauf benötigt.
Heißt: while ist ab drei Durchläufen langsamer. ;-)
Einloggen, um Attachments anzusehen!
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Fr 06.09.13 02:18 
Danke jaenicke, so wie Du's beschrieben hast, ist es auch nachvollziehbar. Und das trifft auch zu, wenn in der For-Schleife eine Abbruchbedingung vorhanden ist?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
FOR i:=0 to FS.Count-1 Do
  Begin
   ...
   Numread:=FS.Read(b,1);
   IF Numread<>1 then Break;
  end;


Kann mir Dein Beispiel leider erst am Montag anschauen. Bin z.Z. leider nur mobil im Netz.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.09.13 08:27 
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Danke jaenicke, so wie Du's beschrieben hast, ist es auch nachvollziehbar. Und das trifft auch zu, wenn in der For-Schleife eine Abbruchbedingung vorhanden ist?
Das ist etwas anderes. Die for-Schleife ist unter der Voraussetzung schneller, dass man vorher weiß wie viele Durchläufe es gibt. Wenn man hingegen eine Abbruchbedingung prüft, sind das natürlich zusätzliche Befehle. Wenn man diese Prüfung auch als Schleifenbedingung benutzen könnte, macht while/repeat mehr Sinn, da diese Prüfung ja nicht bei for wegfällt und somit die Prüfungen der for-Schleife zusätzlich sind.

Ist hingegen die normale Anzahl der Durchläufe vorgegeben und das andere nur eine zusätzliche Bedingung ist weiter eher for schneller, wobei man da im Einzelfall schauen müsste wie der Compiler das optimiert. In der Regel sollte das aber nur die Prüfung und ein Sprung sein, und das wäre dann in der while-Schleifenbedingung genauso, so dass die gesparten Befehle bei for weiter ein Vorteil sind.

Nebenbei:
Wenn man die Anzahl der Durchläufe kennt, ist for auch übersichtlicher, da man dies bei fremdem Quelltext sofort erkennt. Bei einer while- oder repeat-Schleife muss man erst in der Schleife schauen wann diese abbricht usw., so dass man mehr Zeit braucht um den Quelltext zu überblicken.

Für diesen Beitrag haben gedankt: rushifell