![]() |
Re: for-Schleife gegen über while-Schleife
Vielleicht sollte man auch den Wert von i nach Beendigung der Schleife in Betracht ziehen.
Bei der While Methode wird i inkrementiert, unabhängig davon, ob danach abgebrochen wird oder nicht. Bei der for-schleife könnte man i direkt als Position des gefundenen Objekts benutzen. wenn's um Lesbarkeit und minimale Geschwindigkeitsgewinne geht: wie wäre es mit
Delphi-Quellcode:
for I := 0 to length(SonnenStundenListe) - 1 do
begin if SonnenStundenListe[i, 0] = PLZ then return true; end; |
Re: for-Schleife gegen über while-Schleife
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: for-Schleife gegen über while-Schleife
Zitat:
Code:
00453340 8B45FC mov eax,[ebp-$04]
00453343 E8E421FBFF call @DynArrayHigh @DynArrayHigh: 00404E88 E8F3FFFFFF call @DynArrayLength 00404E8D 48 dec eax ; Da ist dein -1 wieder ;) 00404E8E C3 ret 00404E8F 90 nop 00453348 85C0 test eax,eax Edith: Die man koennte length() noch optimieren: length(): Delphi internes length()
Code:
length():
Ticks: ~9 MS: 3.35*10^-5 length__() Wie das delphi interne length() nur ohne nil check
Delphi-Quellcode:
function Length__(var Obj):Integer;
asm mov eax, [eax - 4] end;
Code:
length__():
Ticks: ~8 MS: 3.38*10^-5 length_() Als inline variante
Delphi-Quellcode:
function Length_(var Obj):Integer; inline;
begin result := pDWord(DWord(Obj) - 4)^; end;
Code:
length_():
Ticks: ~1 MS: 2.94*10^-5 |
Re: for-Schleife gegen über while-Schleife
Zitat:
|
Re: for-Schleife gegen über while-Schleife
Ich würde ich der For-Schleife sogar ein Exit anstelle eines Break verwenden (Natürlich nur wenn möglich).
Damit erreiche ich, dass das Register für Result möglichst lange dem Compiler für anderweitige Benutzung zur Verfügung steht.
Delphi-Quellcode:
function IsPLZInArray(SonnenStundenListe: TSonnenStunden; PLZ: Integer): Boolean;
var i: Integer; CurrentPLZ: Integer; begin for i := 0 to length(SonnenStundenListe) - 1 do begin CurrentPLZ := SonnenStundenListe[i, 0]; if CurrentPLZ = PLZ then begin Result := True; Exit; end; end; Result := False; // nichts gefunden end; |
Re: for-Schleife gegen über while-Schleife
Zitat:
|
Re: for-Schleife gegen über while-Schleife
Zitat:
Auf der anderen Seite aber heute noch zuläßt, das eine PLZ als integer deklariert wird :wall: Gruß Frank |
Re: for-Schleife gegen über while-Schleife
Zitat:
Indem man das Result so spät wie möglich zuweist, gibt man dem Compiler die Möglichkeit das Register frei zu verwenden. |
Re: for-Schleife gegen über while-Schleife
Zitat:
Ich glaube dazu stand auch etwas entsprechendes in der Delphi-Hilfe. |
Re: for-Schleife gegen über while-Schleife
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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