控制事件会导致内存泄漏吗?

时间:2015-02-26 13:06:09

标签: c# xaml windows-phone windows-phone-8.1

订阅事件会导致内存泄漏吗?

也就是说,如果在给定的页面中我做了

public TestPage()
{
    this.InitializeComponent();

    myButton.Click += MyButton_Click;

}

private void MyButton_Click(object sender, RoutedEventArgs e)
{
      Debug.WriteLine("Hello");
}

我是否需要致电

myButton.Click += MyButton_Click;

如果是,我应该在哪里打电话?

1 个答案:

答案 0 :(得分:4)

不,当页面超出范围时,CLR会将其标记,包括其事件处理程序,为垃圾收集做好准备。您无需在页面中取消注册事件处理程序。

当事件处理程序位于其他对象中而不是引发事件的对象时,情况会有所不同。在您给出的示例中,情况并非如此。

如果订阅另一个对象事件的对象首先超出范围,则必须取消订阅事件处理程序,否则当事件源超出范围时,它实际上只会被标记为垃圾回收。

如果引发事件的对象首先超出范围,则没有问题,因为订阅也将超出范围。