2010-01-13 55 views
3

我已阅读MSDN需要取消订阅每个事件的对象必须能够从内存中释放它。我总是使用 - =删除对象内部的所有对事件的引用(如MSDN show)。我是否需要手动删除所有事件以使我的对象从内存中移除?

现在,我不得不维护代码,它有一些内存泄漏。我看到以前的开发人员只是简单地将所有事件订阅的对象设置为NULL,而不是 - 每个事件方法。

例子:

_watcher.Changed += new ... 
_watcher.Created += new ... 
_watcher.Deleted += .. 

//later. 

_watcher = NULL; 

它是一个很好的方式或者它保持变量在内存中?

+0

可能的重复 - http://stackoverflow.com/questions/345130/do-i-need-to-unsubscribe-from-manually-subscribed-to-events-in-asp-net – ChrisF 2010-01-13 16:19:52

+0

@ChrisF:不完全。有专门讨论ASP.NET的。这似乎是一个更一般的.NET问题。 – serhio 2010-01-13 16:24:37

+0

我需要知道.net的一般用途。该问题发生在Windows服务 – 2010-01-13 16:25:47

回答

6

如果没有其他对_watcher的引用,则不需要删除事件处理程序以避免内存泄漏。

作为一个习惯问题,我倾向于明确地删除事件处理程序。

+1

正确。只要没有强对象本身的引用,对象就会被GCed并且事件处理程序自动取消订阅。 MSDN不是很清楚这个... – Noldorin 2010-01-13 16:24:02

+0

@Noldorin:是的,我总是不得不三思而行! – 2010-01-13 16:24:51

相关问题