Allgemeine Delphi Tipps
hallo zusammen,
ich wollte mal fragen was es denn so für tipps für die delphi programmierung gibt, damit die exe dann weniger auslastung hat und/oder schneller läuft. sowas wie anscheinen inc(i) schneller ist als i:= i + 1 also z.B. auch welche variablentypen man vorziehen sollte (keine real, lieber das als das, ...) könnte ja auch für die allgemeinheit ganz interessant sein, oder? gruss, iaby |
Re: Allgemeine Delphi Tipps
Zitat:
|
Re: Allgemeine Delphi Tipps
Das würde ich aber nicht als allgemeine Tipps bezeichnen. Das geht IMHO schon eher in die Ecke "Optimierungen". Aber trotzdem: Interessant ist es sicher.
|
Re: Allgemeine Delphi Tipps
ok, Tipp: wenn Inc(i); schneller als i := i+1; ist, dann ist Dec(i); auch schneller als i := i-1; :zwinker:
sowas würde mich auch mal schwer interessieren! |
Re: Allgemeine Delphi Tipps
Für Pptimierungen der Anwendung bezüglich Performance besorgt man sich (wenn es das Budget zuläßt) am besten einen Profiler wie AQTime
Mit solch einem Profiler läßt man sein Programm laufen und schaut sich anschließend die Programmteile an, die am meißten Zeit benötigen. Ich denke für allgemeine Tipps kann man zwar 1000te Aufschreiben (Begin/EndUpdate bei Trees/Listviews verwenden), aber nach Murphy ist es immer der 1001te Tipp (den man noch nicht beachtet hat) der das Programm um 50% schneller macht. |
Re: Allgemeine Delphi Tipps
und denkt daran: inc hat einen zweiten parameter!
inc(i,10) |
Re: Allgemeine Delphi Tipps
...und man kann inc/dec nicht auf Felder von Objekten anwenden.
|
Re: Allgemeine Delphi Tipps
Aber man kann mit "inc" sehr schön ein Array von null-terminierten Strings durchlaufen. ;)
Delphi-Quellcode:
const
bla = 'Hallo'#0'Welt!'#0'Hallo'#0'Simmi'#0#0; var p : pchar; begin p := @bla[1]; while(p[0] <> #0) do begin MessageBox(0,p,nil,0); inc(p,lstrlen(p) + 1); end; end; |
Re: Allgemeine Delphi Tipps
Zitat:
Ausführungsgeschwindigkeit möglich. Hier 3 Beispiele:
Delphi-Quellcode:
Bei langen Strings sind die optimierten Varianten um Welten (~100) schneller als
// dreht einen String um
// die langsame Version function ReverseSlow(s:string):string; var i : Integer; begin Result := ''; for i := Length(s) downto 1 do Result := Result +s[i]; // hier ist das Problem // bei jedem Anfügen wird neuer Speicher reserviert und alt->neu kopiert end; // die schnelle Version // auch die Übergabe als const-Paramter bringt eine Verbesserung function ReverseFast(const s:string):string; var i, j : Integer; begin SetLength(Result, Length(s)); // vorab Speicher reservieren j := 0; for i := Length(s) downto 1 do begin Inc(j); Result[j] := s[i]; end; end; // noch schnellere Version verwendet Zeiger // 2 Nachteile: // Code wird unübersichtlich und fehlerträchtig // Schutzmechanismen von Delphi werden ausgehebelt (Rangecheck) function ReverseUltraFast(s:string):string; var i : Integer; p : PChar; begin SetLength(Result, Length(s)); p := PChar(Result); for i := Length(s) downto 1 do begin p^ := s[i]; Inc(p); end; end; die langsame Version ReserveSlow. PS: man sollte den Titel diese Threads vielleicht auf Delphi Performance Tips ändern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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