www.mikrocontroller.net

Forum: PC-Programmierung [C#] Verwaiste Events und Garbage Collector


Autor: Dieter L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.