Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Delphi-Programme optimieren

  Alt 8. Mär 2009, 14:21
Also ich habe die Erafhrung gemacht, dass man weniger Speicher meistens mit mehr Rechenaufwand bezahlt, und wenig Rechenaufwand mit viel Speicher. Es gilt einen Kompromiss zu finden. Z.B. habe ich mal einen Leveleditor für ein Spiel (nicht von mir) geschrieben. Bei manchen Levels sind sehr, sehr viele Objekte zu zeichnen. Deshalb zeichne ich nur neu, wenn sich etwas ändert, dann lege ich diesen Layer in einem Bitmap im Speicher ab. Das resultiert zwar in einem höheren Speicherverbrauch (Bitmaps sind absolute Speicherfresser), aber lässt eine annehmbare Geschwindigkeit zu.

Was die Geschwindigkeitsoptimierung angeht: Pauschal kann man sagen, je weniger Anweisungen, desto höhere Geschwindigkeit. Dabei ist auch zu beachten, dass nicht jede Operation gleich schnell ist. Eine Multiplikation ist z.b. schneller als eine Division, manchmal lohnt es sich also, Algorithmen so umzuformen, dass man andere Operationen benutzen kann. Wenn du ein absoluter Perfromancefreak bist, kannst du bestimtme Funktionen auch in Inline-Assembler implementieren. Der damit verbundene Aufwand ist aber nur in sehr seltenen Fällen sinnvoll, wenn schon alles andere perfekt optimiert ist. Meistens bringen "gröbere" Optimierungen mehr.

Bei Parametern > 4 Byte sollte man, wenn möglich, die Direktive const verwenden. Dadurch spart man sich erstens die Rechenzeit zum Kopieren der Daten auf den Stack, spart Speicher, und beugt einem Stacküberlauf vor. Vor allem bei großen Datentypen wie beispielsweise Strings ist das sehr sinnvoll.

Wenn man Dateien von der Festplatte liest, ist es sinnvoll, die Datei in größeren Blöcken (gepuffert) einzulesen, weil die Festplatet so effizienter arbeiten kann. Man kann kleinere Dateien auch komplett in den Speicher laden (TMemorystream), was allerdings wieder auf Kosten des Arbeitsspeichers geht. Es gibt auch noch Memory Mapped Files, bei denen die Pufferung anscheinend automatisch von Windows übernommen wird, aber wei lich mich damit noch nicht befasst habe, kann ich dazu nichts sagen.

Das sind jetzt so ein paar Sachen, die mir spontan einfallen, wenn es um Optimierungen geht.
  Mit Zitat antworten Zitat