控件事件导致内存泄漏?
Controls events causes memory leaks?
订阅事件会导致内存泄漏吗?
也就是说,如果我在给定的页面中这样做
public TestPage()
{
this.InitializeComponent();
myButton.Click += MyButton_Click;
}
private void MyButton_Click(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Hello");
}
我需要打电话给
myButton.Click += MyButton_Click;
如果有,应该在哪里调用?
不,当页面超出范围时,CLR 会将其标记为准备好进行垃圾回收,包括其事件处理程序。您不需要在您的页面中注销事件处理程序。
当事件处理程序在 其他 个对象中时,情况与引发事件的对象不同。在你给出的例子中,情况并非如此。
如果订阅另一个对象的事件的对象首先超出范围,它必须取消订阅事件处理程序,否则它实际上只会在事件源也超出范围时被标记为垃圾回收。
如果引发事件的对象首先超出范围,则没有问题,因为订阅也会超出范围。
订阅事件会导致内存泄漏吗?
也就是说,如果我在给定的页面中这样做
public TestPage()
{
this.InitializeComponent();
myButton.Click += MyButton_Click;
}
private void MyButton_Click(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Hello");
}
我需要打电话给
myButton.Click += MyButton_Click;
如果有,应该在哪里调用?
不,当页面超出范围时,CLR 会将其标记为准备好进行垃圾回收,包括其事件处理程序。您不需要在您的页面中注销事件处理程序。
当事件处理程序在 其他 个对象中时,情况与引发事件的对象不同。在你给出的例子中,情况并非如此。
如果订阅另一个对象的事件的对象首先超出范围,它必须取消订阅事件处理程序,否则它实际上只会在事件源也超出范围时被标记为垃圾回收。
如果引发事件的对象首先超出范围,则没有问题,因为订阅也会超出范围。