在努力减少内存泄漏,我试图找出是否,添加一个处理程序到"DataContextChanged"事件或"Loaded"事件上的XAML用户控件,即(UserControl.xaml.cs):
public MyUserControl()
{
InitializeComponent();
DataContextChanged += new DependencyPropertyChangedEventHandler(MyUserControl_DataContextChanged);
Loaded += new RoutedEventHandler(MyUserControl_Loaded);
}
如果我需要删除它。WPF是否可以处理这个问题,还是我需要手动删除它们?
简短的回答——否
你只需要删除处理程序时,他们将保持一个对象的根,这意味着防止其垃圾收集。如果您创建了一个子对象,并让它的一个事件处理程序指向父对象,则不会发生这种情况,因为没有对子对象的悬垂引用。
如果你创建了一个子对象,并且父对象将它的一个事件处理程序指向子对象,那么将发生,因为现在父对象有一个对子对象的引用,这将使它保持活动(扎根)。
在上面指定的情况下,它完全是内部的——在类内部添加对自己类的引用。当用户控件被销毁时,它不会在另一个类的事件处理程序中有引用。因此您不需要删除事件处理程序。