Speicherlecks bei der C#-Ereignisbehandlung vermeiden: Anonyme Methoden ordnungsgemäß abbestellen
Ereignisse sind von grundlegender Bedeutung für das Erreichen einer losen Kopplung bei C#-Objektinteraktionen. Diese Flexibilität birgt jedoch ein Risiko: Speicherverluste, wenn Ereignishandler nicht ordnungsgemäß entfernt werden. Dies gilt insbesondere bei anonymen Methoden.
Untersuchen wir ein typisches Szenario, in dem eine anonyme Methode ein Ereignis abonniert:
MyEvent += delegate(){Console.WriteLine("Event triggered!");};
Das Problem? Dieser anonymen Methode fehlt eine benannte Referenz, was ihre spätere Entfernung erschwert. Dies kann dazu führen, dass der Event-Handler im Speicher verbleibt, auch wenn er nicht mehr benötigt wird.
Die Lösung ist einfach: Weisen Sie die anonyme Methode vor dem Abonnieren einer benannten Delegatvariablen zu:
Action myEventHandler = delegate(){Console.WriteLine("Event triggered!");}; MyEvent += myEventHandler;
Jetzt enthält myEventHandler
einen Verweis auf die anonyme Methode. Dies ermöglicht eine saubere Abmeldung mit dem -=
-Operator:
// ... later in your code ... MyEvent -= myEventHandler;
Dadurch wird sichergestellt, dass die anonyme Methode ordnungsgemäß aus dem Speicher freigegeben wird, wodurch Lecks verhindert werden. Pflegen Sie immer einen Verweis auf Ihre anonymen Event-Handler, um eine sichere und effiziente Abmeldung zu ermöglichen.
Das obige ist der detaillierte Inhalt vonWie verhindern Sie Speicherlecks, wenn Sie anonyme Methoden von C# -Ereignissen abzahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!