Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Collection - Speicher freigeben (https://www.delphipraxis.net/87573-collection-speicher-freigeben.html)

matz 2. Mär 2007 12:31


Collection - Speicher freigeben
 
Hallo Gemeinde,

ich habe mich heute mit Collection (hier aus dem Forum) beschäftigt.
Dabei ist mir aufgefallen das zwar vor einem LoadfromFile ein Clear ausgeführt wird aber die Speicherauslastung im TaskManager sich nicht ändert sondern nach erfogtem Load erhöht.

Ich habe geplant diese Klasse in einem Programm einzusetzten welches als Viewer für eine von einem anderen Programm gespeicherte Collection dient. Um die Anzeige zu aktualisieren soll die gespeicherte Collection jedesmal neu geladen werden.

Was kann ich machen um das gewünschte Verhalten zu erreichen (natürlich habe ich die Boardsuche bereits bemüht, ich habe aber leider nichts passendes gefunden)

schon mal besten Dank für Eure Mühe

Gruß Matz

shmia 2. Mär 2007 12:57

Re: Collection - Speicher freigeben
 
Zitat:

Zitat von matz
Dabei ist mir aufgefallen das zwar vor einem LoadfromFile ein Clear ausgeführt wird aber die Speicherauslastung im TaskManager sich nicht ändert sondern nach erfogtem Load erhöht.

Das ist "normal". Der Memory-Manager von Delphi holt sich grössere Speicherblöcke von Windows und teilt kleinere Blöcke (bis herunter zu 16 Bytes ?) dann deinem Programm zu.
Das Freigeben von Speicher hinterlässt "Löcher wie in schweizer Käse" in dem Speicher des MM.
Bei erneuten Speicheranforderungen findet sich manchmal kein passendes Loch, also wird nochmals ein grosser Block von Windows angefordert.

Es gibt auch MM, die etwas intelligenter mit dem Speicher umgehen, als die der Standard MM von Delphi tut.

matz 2. Mär 2007 13:20

Re: Collection - Speicher freigeben
 
Na das ist aber dann schon mal sehr schlecht.
Ich habe gerade mal getestet beim 1. Start (inkl. Ladevorgang) hat das Prog ca. 12000K belegt nach eínem Refresh sind es schon mal 19000 usw.
Wenn ich das Spiel nach eine Weile mache bekomme ich bestimmt bald eine Fehlermeldung wegen mangeldem Speicher. Da sollte es doch eine Lösung geben.

Oder?

Gruß Matz

shmia 2. Mär 2007 13:30

Re: Collection - Speicher freigeben
 
Zitat:

Zitat von matz
Wenn ich das Spiel nach eine Weile mache bekomme ich bestimmt bald eine Fehlermeldung wegen mangeldem Speicher.

Mach dir mal keine unnötigen Sorgen, wenn dein Programm keinen Fehler hat, wird der Speicherverbrauch nicht ständig ansteigen. Es stellt sich nach kurzer Zeit eine Art Sättigungszustand ein.

Mit FastMM kannst du übrigens ganz gut Speicherfresser in deiner Anwendung lokalisieren.
Ausserdem ist dieser MM auch noch schneller als der Standard MM.
http://sourceforge.net/projects/fastmm

matz 2. Mär 2007 13:37

Re: Collection - Speicher freigeben
 
Danke erst mal für die Antworten.

Na da will ich mal hoffen das es sich einpegelt.

matz 2. Mär 2007 14:55

Re: Collection - Speicher freigeben
 
Nun habe ich es mal getestet.

Es pegelt sich leider nicht ein und ich bekomme eine Fehlermeldung (Speichermangel).

shmia 5. Mär 2007 09:38

Re: Collection - Speicher freigeben
 
Zitat:

Zitat von matz
Es pegelt sich leider nicht ein und ich bekomme eine Fehlermeldung (Speichermangel).

Dann muss du den FastMM einbinden; der hilft dir bei der Suche der Speicherlecks.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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