我开发了一个使用MvvmLight的 UWP 应用程序,但存在一些内存泄漏。我的应用程序包含 2 个主要页面:
- 主页,包含表单列表
- 详细信息页面,包含所选表单的所有详细信息(数据、照片等)
每次打开详细信息页面时,我都可以看到内存使用了 25 多个 Mo:所以在加载了十几个页面后,应用程序变得更慢......
我的 ViewModels 继承自ViewModelBase,所以我可以使用Cleanup()。
所以我尝试在DetailsViewModel中使用它,如下所示:
public override void Cleanup()
{
Messenger.Default.Unregister<SendImageOnDetailsViewModel>(this);
Messenger.Default.Unregister<SendDeletedImageOnDetailsViewModel>(this);
VComponentBoms = null;
VComponentOrders = null;
VCoreOrders = null;
CarForm = null;
base.Cleanup();
}
在用户保存表单之后,在他返回HomeViewModel之前,我直接在DetailsViewModel上调用它:
Cleanup();
NavigationService.NavigateTo<HomeViewModel>(this, new object[] { }, "RefreshForms", new object[] { }, false);
当用户通过App.xaml.cs中的AppBackButtonPressed()通过Back button 返回主页时,我也会调用它:
if (cur.GetType() == typeof(DetailsViewModel))
{
cur.Cleanup();
GC.Collect();
}
这工作没有错误,但它似乎不是实现它的好方法......
在某些示例中,Cleanup()在页面的Closing 事件中引发,而 UWP 中不存在该事件。
那么有没有更清洁的方法可以用 UWP 做到这一点?