0

我正在開發一個Windows Phone應用程序,我的一個頁面使用加載了一堆UIElements的全景圖,佔用了大量內存。 由於每次我瀏覽到該視圖的頁面重新創建,有沒有什麼辦法重用頁面實例?或者還有其他方法可以確保UIElements不會被創建多次?重複使用PhoneApplicationPage實例

編輯:

導航過程是如下:

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

我想的是,secundary頁面實例的第一個導航後可重複使用。

謝謝

+0

您的應用程序的導航流可能存在問題。你爲什麼多次瀏覽同一頁面? –

+0

我有一個主頁上顯示的項目列表,用戶點擊一個導航到該頁面,然後他可以返回並點擊另一個項目導航回頁面。 – DVD

回答

1

PhoneApplicationPage的生命週期完全由管理運行時間,你不能以任何方式影響它。如果用戶從頁面返回,則會在下次重新創建。請參閱this document,「The OnNavigatedFrom方法」部分。

事實上,如果你絕對要保持二級頁面在內存中,您可以在第二頁上覆蓋普通後退按鈕的行爲,而不是去主網頁,你會去向前到主頁。當然,爲了避免KooKiz的答案中提到的副作用,你必須保持後臺堆棧的順序。

請注意,它仍然不能保證輔助頁面將留在內存中,因爲它取決於垃圾回收器的決定。內存頁面消耗越多,GC的候選者就越好。

+0

如果此答案已解決您的問題,請考慮接受此問題,以便其他讀者也能從此知識中受益。 – Haspemulator

1

問題是如何在導航到輔助頁面後將頁面移到主頁面。

我的猜測是,從二級頁面,你打電話:

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

這是錯誤的,原因有二:

  • 當你發現,你將創建一個新的每次頁面的實例,因此需要使用大量內存
  • 要退出應用程序,用戶將不得不多次按回主頁面

相反,由於主要頁面仍然是導航堆棧,只需調用GoBack從二級頁面重新使用的主要頁面的前一個實例:

NavigationService.GoBack(); 
+0

請檢查我的編輯;) – DVD

+0

@DVD哦,那麼我不認爲有可能重新使用輔助頁面的實例。也就是說,內存不應該成爲問題,因爲當您返回主頁面時,頁面被清除。唯一需要關注的是每次重新創建控件所需的時間。您還可以在主頁面中使用彈出控件顯示內容,而不是使用單獨的頁面,但這取決於您如何顯示信息。 –

+0

實際上,在調用GC之前mem已經長到> 100mb,在256mb的設備上它會在一段時間後崩潰。我最終將我所有的xaml放在一個用戶控件上,並處理它的生命週期,現在每次XD都穩定在40mbs。感謝您的幫助;) – DVD