Speicherfresser

20/08/2009 - 09:19 von René Preußler | Report spam
Hallo NG,

ich habe ein mittelschweres Problem mit VB.
Ich habe eine DLL mit einer komplexen Klassenstruktur
HauptKlasse
Collection
Unterklasse1
Collection
Unterklasse2
Collection
Unterklasse3
Diese DLL wird in einem Benutzersteuerelement verwendet und von dort aus
mehrfach instanziert und die Instanz auch ab und an mal auf Nothing gesetzt.
Nun ist mein Problem, dass der Speicher, der durch die Klassenstruktur
reserviert wird beim Setzen auf Nothing nicht freigegeben wird
Ich habe in der HauptKlasse Class_Terminate implementiert, aber hier kommt
er beim Setzen auf Nothing nicht rein.
Eine Möglichkeit wàre nun, vor dem Setzen auf Nothing noch eine Methode in
der HauptKlasse aufzurufen, die Class_Terminate aufruft, das kann doch aber
nicht Sinn und Zweck sein.
Wozu gibt es den Class_Terminate, wenn es nicht aufgerufen wird?
Muss man evtl. bei der Architektur noch etwas beachten?


René
 

Lesen sie die antworten

#1 Peter Götz
20/08/2009 - 10:23 | Warnen spam
Hallo René,

ich habe ein mittelschweres Problem mit VB.
Ich habe eine DLL mit einer komplexen Klassenstruktur
HauptKlasse
Collection
Unterklasse1
Collection
Unterklasse2
Collection
Unterklasse3
Diese DLL wird in einem Benutzersteuerelement verwendet
und von dort aus mehrfach instanziert und die Instanz auch
ab und an mal auf Nothing gesetzt.



Hier sollte man wissen, was genau Du wann auf Nothing setzt.
Nur die Hauptklasse oder auch die untergeordneten Klassen/
Objekte?

Nun ist mein Problem, dass der Speicher, der durch die
Klassenstruktur reserviert wird beim Setzen auf Nothing
nicht freigegeben wird
Ich habe in der HauptKlasse Class_Terminate implementiert,
aber hier kommt er beim Setzen auf Nothing nicht rein.



Ein Hinweis darauf, dass noch irgend etwas innerhalb dieser
Klasse nicht beendet wird.
Ohne Deinen konkreten Code zu kennen, kann man nur raten.

Werden Deine Unterklassen korrekt beendet?
Werden sonstige Objekte beendet?
Gibt es evtl. noch irgendwelche aktiven Timer?
Gibt es noch irgendwelche Codeschleifen, die nicht
beendet werden?

Eine Möglichkeit wàre nun, vor dem Setzen auf Nothing noch
eine Methode in der HauptKlasse aufzurufen, die Class_Terminate
aufruft, das kann doch aber nicht Sinn und Zweck sein.



Was sollte das bewirken?

Wozu gibt es den Class_Terminate, wenn es nicht aufgerufen wird?



Eben, Terminate wird dann aufgerufen, wenn das zugehörige
Objekt tatsàchlich beendet wird.

Muss man evtl. bei der Architektur noch etwas beachten?



s.oben: Unterklassen, sonstige Objekte, Timer, Codeschleifen usw.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen