【发布时间】:2017-01-26 20:03:54
【问题描述】:
我开发了一个使用 MvvmLight 的 UWP 应用,但存在一些内存泄漏。 我的应用包含 2 个主要页面:
- 主页页面,包含表单列表
- 详细信息页面,包含所选表单的所有详细信息(数据、照片等)
每次打开详细信息页面,我都可以看到内存使用了25个Mo:所以在加载了十几个页面后,应用程序变为慢一点……
我的 ViewModel 继承自 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();
}
我直接在 DetailsViewModel 上调用它,在用户保存表单之后,在他返回 HomeViewModel 之前:
Cleanup();
NavigationService.NavigateTo<HomeViewModel>(this, new object[] { }, "RefreshForms", new object[] { }, false);
当用户通过 Back 按钮,通过 App.xaml.csAppBackButtonPressed() 返回主页时,我也会调用它/strong>:
if (cur.GetType() == typeof(DetailsViewModel))
{
cur.Cleanup();
GC.Collect();
}
这可以正常工作,但似乎不是实现它的好方法...
在某些示例中,Cleanup() 在页面的 Closing 事件 上引发,而 UWP 上不存在该事件。
那么有没有更简洁的方法可以用 UWP 做到这一点?
【问题讨论】:
-
如何缓存页面(NavigationCacheMode)?顺便说一句,你不应该使用 GC.Collect()...
标签: c# memory-leaks uwp mvvm-light viewmodellocator