2014-01-23 81 views
1

我受到我的WP8應用程序內存的飛躍。
我已經調查並縮小了這個問題的範圍,但我希望有關下一步的指導。 我的確有一種預感,即Pivot和LongListSelector是原因,如下所述。WP8:內存泄漏與樞軸和LongListSelector

問題描述: 應用瀏覽大量頁面(通常是幾十頁)。 內存使用量每頁增加大約2-4MB,並未完全釋放。 大約25頁的內存使用量從30MB增加到90MB。

現有代碼: 我已在每個頁面上執行一些清理操作,然後再導航到下一個頁面。 我也已經調用了NavigationService.RemoveBackEntry()來保持Back Stack小。

調查: 我已經使用了內存分析器,它揭示了約15MB的增長是我自己的數據沒有被清理。 剩餘的40-50MB不包含在堆摘要中(即從觀察到的90MB中總共只有大約15MB)。 我將在15MB上工作,但由於它看起來並不是最重要的因素,所以我希望在明智的後續步驟上提供一些指導。

可能的原因: 我有另一組頁面(瀏覽時通常是幾十頁)由非常相似的內容組成。 但是這些頁面不顯示相同的問題。內存使用量始終很低。 導航時,這兩組頁面都使用相似的清理代碼。 一個關鍵區別是受影響的頁面使用Pivot控件,每個控件都有一個3或4個透視項目,其中一些包含LongListSelectors。 LongListSelectors是綁定到運行時生成的通用列表的數據。沒有圖像,只有文字。不是特別長的名單,每個20個左右的項目。 我偶然發現有幾個帖子暗示這個控件的組合很容易出現內存泄漏。 我評論了填充這些控件的代碼,果然,內存使用現在峯值在50-60MB左右。
如果我完全刪除控件,可能會更低(我還沒有測試過)。因此,這些控制不是全部,但顯然是問題的很大一部分。

問題: 是否有這些控件(LongListSelector,Pivot)的已知問題? 是否應該有一些代碼用於清理這些控件?我已經嘗試將列表ItemSource設置爲空列表,但這對內存增長沒有影響。 有什麼辦法可以解決它嗎? (顯然改變使用的控件的類型是一種選擇)。

感謝您的閱讀。

+0

您可以將xaml和代碼放在LongListSelector和Pivot後面嗎?沒有任何代碼,這很難排除故障。 – philorube

+0

我已進一步調查並找到解決方法 - 請參閱 http://cbailiss.wordpress.com/2014/01/24/windows-phone-8-longlistselector-memory-leak/ – cbailiss

回答

0

我有同樣的問題。我所做的只是改變源List<> s到ObservableCollection<> s,然後在的SelectedItem改變我清除收集這是不是在目前可見的。