Event-Handler und Garbage Collection: Ein genauerer Blick
In bestimmten Programmierkontexten ist es von entscheidender Bedeutung, zu verstehen, wie Event-Handler mit der Garbage Collection interagieren. Lassen Sie uns die Beziehung zwischen Event-Herausgebern und ihren Handlern untersuchen.
Bedenken Sie dieses Code-Snippet:
<code>MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass = null;</code>
Wird pClass
der Müll abgeholt? Die Antwort lautet: Ja, das Veranstaltungsabonnement selbst verhindert nicht die Erhebung durch den Verlag. Die Einzelheiten hängen jedoch davon ab, ob MyFunction
eine statische Methode oder eine Instanzmethode ist.
Statische vs. Instanzmethoden als Handler
Ein Delegat, der auf eine Instanzmethode verweist, behält einen Verweis auf diese Instanz bei. Das bedeutet, dass ein Event-Abonnement die Speicherbereinigung verhindern kann. Sobald jedoch der Herausgeber der Veranstaltung (pClass
) zum Inkasso berechtigt ist, entfällt dieses Problem.
Umgekehrt, wenn MyFunction
statisch ist, enthält der Delegat keine Instanzreferenz und stellt somit kein Hindernis für die Speicherbereinigung dar.
Objektpersistenz verhindern
Die Verwendung eines instanzbasierten Ereignishandlers bedeutet, dass der Herausgeber (pClass
) einen Verweis auf das Objekt des Handlers behält. Das Gegenteil ist nicht der Fall; Der Handler hält den Herausgeber nicht am Leben.
Wenn Sie also möchten, dass das Handler-Objekt durch Garbage Collection erfasst wird, ist eine Abmeldung vom Ereignis nicht erforderlich. Wenn jedoch die Lebensdauer des Herausgebers die des Handlers überschreitet, ist die Abmeldung von entscheidender Bedeutung, um eine unbeabsichtigte Persistenz des Handlers zu vermeiden.
Statische Ereignisse und Instanzhandler: Ein Wort der Vorsicht
Der Einsatz statischer Ereignisse mit instanzbasierten Handlern erfordert sorgfältige Überlegung. Das Fehlen von Instanzverweisen in statischen Delegaten kann dazu führen, dass das Handlerobjekt auf unbestimmte Zeit im Speicher verbleibt, was möglicherweise zu Speicherlecks führt.
Das obige ist der detaillierte Inhalt vonBeeinflusst Event -Handler -Typ die Müllsammlung des Event -Verlags?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!