2017-01-29 4 views
0

В UWP (XAML/C#) я использую Frame.Navigate(typeof(Page2));, а в C# из Page2 Я использую таймер, и когда я использую Frame.GoBack();, кадр действительно возвращается, но таймер не останавливается - I из-за этого страница и все ее компоненты все еще работают в фоновом режиме, и из-за этого приложение потребляет слишком много ОЗУ. Как я могу «убить» страницу?Навигация по страницам и работа в фоновом режиме

Примечание: если пользователь использует эту навигацию в 10 раз, страница 10 раз в фоновом режиме, и это плохо ..

+0

Какой таймер вы используете? – Yarik

+0

'Windows.UI.Xaml.DispatcherTimer', но это не проблема таймера (я просто нашел его благодаря таймеру и точке останова на _timer.Tick, но проблема в том, что все компоненты и все страницы все еще находятся в фоновом режиме) , – Peter

+1

Не забудьте немедленно отключить таймер, как только вы перейдете от страницы. 'DispatcherTimer' создает сильную ссылку между' Dispatcher' и вашей страницей при ее запуске. – Yarik

ответ

1

Важно понимать, что CLR сборщик мусора это тот, кто несет ответственность за «убийство msgstr "неиспользуемые объекты. Объект (и все его члены) становится «неиспользуемым», когда он больше не ссылается.

При запуске Windows.UI.Xaml.DispatcherTimer он добавляет себя к коллекции таймера внутри текущего Dispatcher, тем самым создавая прямую ссылку между Dispatcher и таймером. Таймер, в свою очередь, содержит ссылку на страницу, на которой он запущен. Поскольку Dispatcher является глобальным объектом, он будет поддерживать вашу страницу до тех пор, пока таймер не будет остановлен.

Там могут быть и другие причины утечки памяти (это довольно обширная тема), в том числе:

  • Другие источники прямых или косвенных ссылок на странице;
  • Подписки на статические события;
  • Сложные привязки данных, такие как {Binding Path=Property.Subproperty};

Я хотел бы предложить вам использовать профайлер памяти для поиска утечек памяти, если выше не помогает, таких как диагностические инструменты, включенные в Visual Studio 2015.

Смежные вопросы