Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unbenutzte Objekte erkennen (https://www.delphipraxis.net/120172-unbenutzte-objekte-erkennen.html)

bernie110 6. Sep 2008 17:11


Unbenutzte Objekte erkennen
 
Hallo,
ich habe ein generelles Problem, für das ich noch keine Lösung gefunden habe :(
Und zwar habe ich ein "großes" Programm geschrieben, das innerhalb einer Schleife viele Objekte erzeugt und auch die meisten wieder freigibt - die meisten, aber nicht alle! Das sehe ich daran, dass nach jedem Schleifendurchlauf der Speicher, den das Programm belegt, größer wird.

Nun möchte ich gerne wissen, welche Objekte ich vergessen habe freizugeben, so dass sie am Ende der Schleife noch belegt sind. Das im Programmcode durchzuforsten und für alle Programmzweige zu untersuchen, erscheint mir zu aufwendig.

Da ich mit der Suchfunktion hier noch kein Ergebnis bekam, stelle ich hier nun meine Frage:
Gibt es eine Möglichkeit, sich entweder in der Borland-IDE oder per Programmcode solche eigenen erzeugten und nicht wieder freigegebenen Objekte anzeigen zu lassen?

Vielen Dank für Eure Antworten!

mkinzler 6. Sep 2008 17:13

Re: Unbenutzte Objekte erkennen
 
Merk dir die Objekte

Bernhard Geyer 6. Sep 2008 17:14

Re: Unbenutzte Objekte erkennen
 
Einfach FastMM einbinden, TD32-Debug-Infos aktivieren und am Programmende vom erzeugten Logfile auf den Erstellungspunkt der nicht mehr freigegeben Objekt hingewiesen werden.

DeddyH 6. Sep 2008 17:18

Re: Unbenutzte Objekte erkennen
 
Letzteres kann ich auch nur empfehlen, besser Infos wirst Du IMHO kaum bekommen.

Reinhard Kern 6. Sep 2008 17:23

Re: Unbenutzte Objekte erkennen
 
Zitat:

Zitat von bernie110
Gibt es eine Möglichkeit, sich entweder in der Borland-IDE oder per Programmcode solche eigenen erzeugten und nicht wieder freigegebenen Objekte anzeigen zu lassen?

Vielen Dank für Eure Antworten!

Hallo,

du kannst ja eine Prozedur DeleteAllObjects schreiben, in die du alle aufnimmst, und die du am Ende aufrufst. Ich benutze oft Objekte, die nur bei Bedarf erzeugt werden (z.B. Datenverbindungen oder V24-Schnittstellen), im finalen Zertrümmerer kann man ja abfragen "if O1 <> nil then O1.Delete" oder sichere Verfahren wie FreeAndNil verwenden.

Natürlich darf man da auch nicht vergessen, ein neu programmiertes Objekt einzufügen!

Gruss Reinhard

Jelly 6. Sep 2008 19:18

Re: Unbenutzte Objekte erkennen
 
Zitat:

Zitat von Reinhard Kern
du kannst ja eine Prozedur DeleteAllObjects schreiben,

Zitat:

Zitat von Reinhard Kern
Natürlich darf man da auch nicht vergessen, ein neu programmiertes Objekt einzufügen!

Oder besser gleich alle Objekte in eine TObjectList aufnehmen, und diese Liste einfach am Ende freigeben. Die ObjectList hat die Funktionalität, beim Freigeben alle enthaltenen Objekte mit freizugeben.

Elvis 6. Sep 2008 19:50

Re: Unbenutzte Objekte erkennen
 
Es gäbe auch die Möglichkeit "Free" zu vergessen.
Barry Kelly schreib vor einiger Zeit einen MM, der den Boehm Garbage Collector für C/C++ in Delphi nutzbar macht.
Ich hatte ein Windowsservice System, dass damit lange Zeit absolut sorgenfrei lief, und es enthielt fast kein Free. *g*
Und es läuft nur deshalb nicht mehr, weil ich es irgendwann durch eine .Net-basierte Lösung ersetzt habe.

bernie110 12. Sep 2008 05:44

Re: Unbenutzte Objekte erkennen
 
Zitat:

Zitat von Jelly
Zitat:

Zitat von Reinhard Kern
du kannst ja eine Prozedur DeleteAllObjects schreiben,

Zitat:

Zitat von Reinhard Kern
Natürlich darf man da auch nicht vergessen, ein neu programmiertes Objekt einzufügen!

Oder besser gleich alle Objekte in eine TObjectList aufnehmen, und diese Liste einfach am Ende freigeben. Die ObjectList hat die Funktionalität, beim Freigeben alle enthaltenen Objekte mit freizugeben.

Die TObjectList nutze ich sehr intensiv an vielen Stellen im Programm :) Und diese Listen sind auch noch geschachtelt...
Da nun am Schleifenende nicht alle Listen lösche kann, sondern teilweise nur die Objekte darin und da ich offensichtlich nicht alle Objekte lösche, brauche ich eben so ein Tool.
Ich werde am Wochenende mal Euren Vorschlag mit FastMM ausprobieren.

Danke nochmals!

RWarnecke 12. Sep 2008 06:22

Re: Unbenutzte Objekte erkennen
 
Ein anderes Tool wäre noch Eurekalog.

bernie110 12. Okt 2008 18:49

Re: Unbenutzte Objekte erkennen
 
Zitat:

Zitat von bernie110
[...] Ich werde am Wochenende mal Euren Vorschlag mit FastMM ausprobieren.

Na ja, ich habe es erst jetzt geschafft, FastMM4 auzuprobieren und einzusetzen. Nach anfänglichen Schwierigkeiten, das Output-Textfile zu erzeugen (die dll-Datei muss im Application-Ordner vorhanden sein!), bin ich jetzt dabei, herauszufinden, wo die vielen Objekte, die noch belegt sind, erzeugt werden und wie ich sie passend dazu wieder löschen kann.

Danke für Eure Tipps!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 Uhr.
Seite 1 von 2  1 2      

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