[英]Handling memory in Universal Windows Apps in Windows 10
我正在為Windows 10開發一個UWP應用程序。我的應用程序中存在內存管理問題。 我有一個SplitView
其內容中將包含大量圖像。 當用戶單擊圖像時,將在窗格中加載完整大小的圖像。 我正在XAML中直接注冊很多Click and Tapped事件。 當我檢查內存使用情況時,它會不斷增加,在一點之后,應用程序崩潰了。 我的問題是,我是否需要取消注冊我在XAML中注冊的所有事件才能釋放內存? 我嘗試調用GC.Collect()
但這並沒有解決問題。 我認為可能存在內存泄漏。 應用程序中有多個頁面,當用戶選擇SplitView
外部可用的按鈕時,內容會發生變化,如何在使SplitView內容具有其他頁面之前取消注冊該特定頁面中注冊的事件。
編輯:
整個頁面的XAML超過300行,所以我不能在這里粘貼它。 但事件是這樣注冊的
<Button Name="Sample" Tapped="Sample_Tapped" Content="Sample Button" />
每次都會重新創建頁面。 它沒有緩存。 我在SplitView內容中有一個Frame,每當用戶希望更改顯示的圖像部分時,它就會被更改。
MainFrame.Navigate(typeof(ImagePage),"SampleSection");
當用戶更改部分時,我正在調用垃圾收集器
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
GC.Collect();
}
但是沒有釋放內存。
我認為這一行會導致問題:
MainFrame.Navigate(typeof(ImagePage),"SampleSection");
每當用戶選擇圖像時,您將繼續創建新頁面。 它會耗費記憶加班。
解決方案是使用新數據(新DataContext?)刷新頁面,而不是創建新數據。 另一種解決方案是當您需要使用BackStack屬性的新頁面時清除MainFrame的導航堆棧。
將XAML中的NavigationCacheMode
設置為“Required”也可以提供幫助,但它不是問題的根源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.