没有,WithEvents字段和内存泄漏

时间:2010-02-24 15:56:44

标签: .net vb.net

是否有必要将所有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
}

1 个答案:

答案 0 :(得分:4)

如果您订阅的对象比订阅者长,则会产生内存泄漏。在大多数情况下,情况并非如此。

以WinForms为例。通常,您会在WinForm应用程序中的控件上看到WithEvents修饰符。外部Form类订阅并响应这些事件。这不会导致内存泄漏,因为您订阅的项目Control实例与订阅者的生命周期大致相同,Form

如果生命周期确实不同,那么将字段设置为Nothing将导致您取消订阅该事件并防止可能的内存泄漏。