![]() |
Speicherüberwachung
Hallo alle,
in meinem Programm lade ich durch "Datei öffnen" dynamisch Objekte aus einem Stream (so ähnlich wie es die IDE auch macht). Der Nutzer kann damit arbeiten und irgendwann "die Datei schließen". Dann werden alle verwendeten Objekte wieder freigegeben - oder sollten jedenfalls. Welche effektiven Methoden gibt es denn, herauszubekommen ob alle Objekte wirklich freigegeben wurden (also der Stand dem vor "Datei öffnen" entspricht) und wenn nicht welche Objekte übrig bzw. neu sind? Ich dachte mir, ich könnte ja die gesammte Application nach allen Objekten durchsuchen, die einen entsprechenen Owner haben und den Stand vermerken -> Classname - Name - Owner.ClassName - Owner.Name (es hat jedoch nicht jede Komponente einen eindeutigen Namen) Nach Datei Öffnen + Schließen mache ich das ganze nochmal und lasse mir die Differenzen anzeigen... Macht sowas Sinn? Gibt es bessere Lösungen? Wie geht man mit Objekten um, die keinen Owner haben? Ist für mich Neuland, bisher hatte ich eher übersichtlichere Programme in Arbeit. Beiträge zum Thema Speicherleck und Tools dazu habe ich noch nicht verstanden :-( Danke stahli |
Re: Speicherüberwachung
Evtl. lässt sich FastMM dafür einspannen? Abbild der Objekt vor Laden und nach Speichern + Schließen.
|
Re: Speicherüberwachung
Ich habe mal einen Garbage Collector entwickelt. Dort bin ich so vorgegangen, dass ich mit SetMemoryManager(Ex) die Funktionszeiger für GetMem und FreeMem ausgetauscht habe.
In GetMem kannst du dann prüfen, ob der Aufruf aus TObject.NewInstance kommt (das wird so selten überschrieben, dass du fast alle Fälle abdeckst) und das erzeugte Objekt in einer Liste speichern. In FreeMem prüfst du, ob der Zeiger in deiner Liste vorkommt, wenn ja, löschst du ihn. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz