0

Я разрабатываю приложение для Windows-телефона, на одной из моих страниц используется панорама, которая загружает кучу UIElements, занимая значительную долю памяти. Поскольку каждый раз, когда я перехожу к этому представлению, страница создается заново, есть ли способ повторно использовать экземпляр страницы? Или есть другой способ гарантировать, что UIElements не создаются более одного раза?Повторное использование экземпляров PhoneApplicationPage

EDIT:

Процесс навигации является следующим:

HomePage -> Secundary Page 
Back 
HomePage -> Secundary Page 
Back 
HomePage -> Secundary Page 
etc. 

То, что я хочу, что экземпляр страницы, чтобы вторичная повторно использовать после первой навигации.

Благодаря

+0

Возможно, возникла проблема с потоком навигации вашего приложения. Почему вы много раз переходите на одну страницу? –

+0

У меня есть список предметов, которые будут представлены на домашней странице, когда пользователь нажимает на одну, которую он перемещает на страницу, затем он может вернуться и коснуться другого элемента, вернуться на страницу. – DVD

ответ

1

PhoneApplicationPage «s полностью управляется время выполнения, вы никак не можете повлиять на него. Если пользователь вернется со страницы, он будет вновь создан в следующий раз. См. «this document», «Метод OnNavigatedFrom».

В самом деле, если вы абсолютно хотите сохранить вторичную страницу в памяти, вы можете переопределить нормальное поведение назад кнопку на второй странице, и вместо того, чтобы идти назад на главную страницу, вы бы пойти вперед к Главная страница. Разумеется, вам нужно будет держать стопку в порядке, чтобы избежать побочных эффектов, упомянутых в ответе KooKiz.

Обратите внимание, что по-прежнему не гарантируется, что вторичная страница останется в памяти, так как это зависит от сборщика мусора. Чем больше страниц памяти потребляется, тем лучше кандидат для GC.

+0

Если этот ответ решил вашу проблему, пожалуйста, подумайте о том, чтобы принять его, чтобы другие люди, читающие это, также извлекли выгоду из этих знаний. – Haspemulator

1

Проблема заключается в том, как вы получите страницу на главную страницу после навигации на второй странице.

Я думаю, что с вторичной страницы, вы вызываете:

NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Absolute)); 

Это неправильно по двум причинам:

  • Как вы заметили, вы будете создавать новый экземпляр страницы каждый раз и, следовательно, использовать большие объемы памяти.
  • Чтобы выйти из приложения, пользователю придется отжимать столько раз, сколько они переходили на главную страницу

Вместо этого, так как главная страница все еще находится навигационный стек, просто вызовите GoBack из вторичной страницы повторно использовать предыдущий экземпляр главной страницы:

жизненный цикл
NavigationService.GoBack(); 
+0

Пожалуйста, проверьте мои изменения;) – DVD

+0

@DVD О, тогда я не верю, что можно повторно использовать экземпляр вторичной страницы. Тем не менее, память не должна быть проблемой, так как страница очищается, когда вы возвращаетесь на главную страницу. Единственное беспокойство - время, необходимое для повторного создания элементов управления каждый раз. Вы также можете отображать содержимое с помощью всплывающего элемента управления на главной странице, а не с помощью отдельной страницы, но это зависит от того, как вы показываете информацию. –

+0

На самом деле mem растет до> 100 мб до того, как GC был вызван, на устройстве 256 МБ он всегда разбивался через некоторое время. Я заканчиваю тем, что ставил все свои xaml на пользовательский контроль и обрабатывал его жизненный цикл, теперь его стабильный на 40mbs каждый раз XD. Спасибо за помощь;) – DVD