我刚刚在我正在开发的一个简单的Windows应用商店应用中发现了一个巨大的内存泄漏。
事实证明,我已将UserControl放在ListView的ItemTemplate
中,并挂钩UserControl的Unloaded
事件以分离某个事件处理程序。
我预计当ListView的项目清除时,UserControl的Unloaded
事件将会触发,但不会!但是当我逐个删除项目时,UserControl的Unloaded
事件将按预期触发。
任何人都可以给我一些建议吗?或者除了挂钩Unloaded
事件之外,我应该把清理代码放在哪里。任何想法将不胜感激!谢谢!以下是代码段:
为简化起见,ListView的ItemTemplate
为:
<DataTemplate>
<local:MyUserControl1 />
</DataTemplate>
和MyUserControl1只是一个空的UserControl:
public sealed partial class MyUserControl1 : UserControl
{
public MyUserControl1()
{
this.InitializeComponent();
this.Unloaded += MyUserControl1_Unloaded;
}
private void MyUserControl1_Unloaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("MyUserControl1_Unloaded...");
}
}