Hallo zusammen, kurze Theroriefrage zu C#, Events und dem GarbageCollector: Angenommen ein ObjektA registriert sich auf ein Event des ObjektsB. ObjektA wird anschliessend nicht mehr verwendet. Eigentlich sollte der Garbage Collector dann doch den Konstruktor für ObjektA aufrufen und dieses dann entsorgen. Wird dabei dann auch gleich die Liste der registrierten Events in ObjektB zurechtgestutzt? Konkret/Nochmal anders: Ich habe eine grafische Ausgabe (ObjektA), das den Inhalt einer Variablen (ObjektB) ausgeben kann. Um immer aktuell zu sein, registriert sich die grafische Ausgabe bei der anzuzeigenden Variablen in deren ValueChanged-Event. Jetzt wird das Control (hier: MDI-Fenster) mit der grafischen Ausgabe geschlossen. (Dabei wird doch auch ObjektA zerstört?!). Was passiert mit dem Verweis in der Eventliste von der Variablen? Wenn ich jetzt das Fenster 1000mal öffne (-> registriere) und wieder schliesse, ist danach dann noch 1000x das Event eingehängt? Ist dies der typische Anwendungsfall für die Verwendung eines expliziten Destruktors? Oder erledigt das auch der GarbageCollector automatisch? Danke.
Dieter L. schrieb: > Hallo zusammen, > > kurze Theroriefrage zu C#, Events und dem GarbageCollector: > Angenommen ein ObjektA registriert sich auf ein Event des ObjektsB. > ObjektA wird anschliessend nicht mehr verwendet. Eigentlich sollte der > Garbage Collector dann doch den Konstruktor für ObjektA aufrufen und > dieses dann entsorgen. Wird dabei dann auch gleich die Liste der > registrierten Events in ObjektB zurechtgestutzt? Nein, ObjectA wird in dem Fall auch nicht entsorgt, da ObjectB einen Verweis (über den Event) auf ObjectA hält, es sei denn man löscht die Event-Registrierung. Letztlich ist das ein grundsätzliches Problem bei GCs, da nur nicht mehr referenzierte Speicherbereiche freigeben werden (können), nicht aber nicht verwendete Speicherbereiche erkannt werden können (schlich und ergreifend, da es nicht beweisbar ist, ob ein Speicherbereich nie mehr benutzt werden wird).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.