1
Mit StringList wird bei jedem .add etwas in den Speicher geschrieben. Mit .free gibt man den Speicher wieder frei.
ABER wenn der Arbeitsspeicher trotzdem weiter ansteigt, hat man entweder ein .free vergessen oder etwas übersehen.
Wenn ein .free in einer Funktion gemacht wurde, zuvor aber eine Bedingung gemacht wurde z. B:
if (x = y) then exit;
Und das .free danach niemals aufgerufen wird... steigt der Speicher an. Besonders dramatisch wird soetwas, wenn man solch eine Funktion in einer Schleife durchlaufen lässt. Weil dann können schnell aus wenigen KB mehrere hundert MB werden.
Deshalb:
Bei .create's nach .free's suchen und zusätzlich nach vorzeitigen "exit" prüfen evtl. auch nach "break"/"continue" u. ä. !!
Bei dynamischen Arrays kann ich mir ein ganz ähnliches Problem vorstellen.
Wenn man das richtig gemacht hat, durfte das Programm je nach Ablauf keinen dauerhaft steigenden Arbeitsspeicher verursachen, wobei Schwankungen nach oben und unten (!) möglich sind.
Sinnvoll scheint hier auch die konstante Anwendung von
try and finally zu sein, um dieses Problem zu vermeiden (im finally Bereich dann ein x.free.).
Sehr gut
458
|
Gut
491
|
Geht so
466
|
Schlecht
469
|
Sehr schlecht
482
|