是否有必要将所有Nothing
字段设置为WithEvents
(在Dispose()中)?
显然Handles
关键字会向这些字段添加处理程序,但在此字段不是Nothing
之前不会将其删除,这可能会导致内存泄漏?!。
这应该特别适用于像
这样的案件class Foo
{
Private WithEvents _bar as Bar
Public Sub New(ByVal bar as Bar)
_bar = bar
End Sub
Private Sub Bar_Changed(ByVal sender as Object, _
ByVal e as EventArgs) Handles _bar.Changed
'... '
End Sub
}
答案 0 :(得分:4)
如果您订阅的对象比订阅者长,则会产生内存泄漏。在大多数情况下,情况并非如此。
以WinForms为例。通常,您会在WinForm应用程序中的控件上看到WithEvents
修饰符。外部Form
类订阅并响应这些事件。这不会导致内存泄漏,因为您订阅的项目Control
实例与订阅者的生命周期大致相同,Form
。
如果生命周期确实不同,那么将字段设置为Nothing
将导致您取消订阅该事件并防止可能的内存泄漏。