Я разработал приложение UWP, которое использует MvvmLight, но есть утечки памяти. Мое приложение содержит 2 основных страниц:UWP: как правильно очистить ViewModel?
- на главную страницу, содержащий перечень форм
- Детали страниц, содержащий все сведения о выбранной форме (Данные, фотографии, ...)
Каждый раз, когда я открываю Подробности страницу, я могу видеть, что более 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();
}
Я называю это непосредственно на DetailsViewModel, после того, как пользователь сохранил форму, прежде чем он вернется к HomeViewModel :
Cleanup();
NavigationService.NavigateTo<HomeViewModel>(this, new object[] { }, "RefreshForms", new object[] { }, false);
Я также называю его, когда пользователь возвращается на главную страницу через кнопку Назад через AppBackButtonPressed() в App.xaml.cs:
if (cur.GetType() == typeof(DetailsViewModel))
{
cur.Cleanup();
GC.Collect();
}
Это работает без ошибок, но это не кажется, хороший способ реализовать ...
На некоторых образцах, Очистка() является повышением на Закрытие события страницы, которой нет на UWP.
Так есть ли более чистый способ сделать это с помощью UWP?
Как кэшировать страницу (NavigationCacheMode)? Btw вы не должны использовать GC.Collect() ... –