使用C#,我有一个方法,我有这个代码(名称被更改) -
private void func(...)
{
ClassName c = new ClassName();
c.EventName += delegate
{
//do some work
};
}
现在当方法退出时,事件处理程序会被垃圾收集,还是会留在内存中?
答案 0 :(得分:4)
当c实例被垃圾收集时,它将被垃圾收集。您无需执行任何操作即可将其删除。方法完成后,c实例有资格进行垃圾回收。
答案 1 :(得分:3)
这是来自MSDN,
要防止在引发事件时调用事件处理程序,只需取消订阅该事件即可。为了防止资源泄漏,在处置订阅者对象之前取消订阅事件非常重要。在取消订阅事件之前,发布对象中作为事件基础的多播委托具有对封装订阅者事件处理程序的委托的引用。只要发布对象保存该引用,您的订阅者对象就不会被垃圾回收。
您可以按照以下方式取消订阅活动,
publisher.RaiseCustomEvent -= HandleCustomEvent;