Einzelnen Beitrag anzeigen

lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Arghl...Nachilfe in Speicher-Optimierung gesucht

  Alt 13. Aug 2006, 01:35
Moin ;)

Zuerst einmal solltest Du das "setLength" aus der Schleife rausnehmen. Schliesslich weisst Du schon direkt zu Beginn, wie gross das Array letzendlich sein muss.
Dieses staendige setLength erzeugt 'ne Menge Overhead.

Und genau die Stelle duerfte auch Ursache Deines Problems sein. Mutmasse ich jetzt einfach mal so, ohne die tiefsten Geheimnisse des Memory Managers von Delphi zu kennen. Grob vereinfacht duerfte meiner Meinung nach ungefaehr folgendes passieren:

1. Die Laenge von mypics wird auf 1 gesetzt und sagen wir dafuer die Bytes 0-499 reserviert
2. Ein String wird zur Stringliste hinzugefuegt, belegt Bytes 500-599
3. Laenge von mypics wird auf 2 gesetzt. *peng* mypics belegt nun die Bytes 600-1599

Solange Schritt 2 nicht dazwischenfunkt, ist alles wunderbar. Dann kann man einfach das Array etwas vergroessern und die Bytes 0-999 benutzen. Geht aber nicht, da halt in diesem Bereich zwischendurch schon Speicherplatz fuer die Stringliste reserviert ist.

Das hiesse: Abgesehen von den (eigentlich unnoetigen) Kopieraktionen verschiebt sich das Array mypics immer weiter nach hinten im Adressraum. Irgendwann (und das geht sogar recht schnell) ist man dann soweit hinten angelangt, dass es mit 32-Bit nicht mehr adressierbar ist - da hilft dann auch keine Auslagerungsdatei mehr.

Soweit jedenfalls meine Theorie. ;-)

Gruesse,

Lizzy
  Mit Zitat antworten Zitat