2013-07-01 14 views
0

我有一個主 - 細節的關鍵。樞軸包含5個PivotItems,每個都有十幾個項目。每個項目都有細節頁面。從大型主軸導航後進行內存清理。

現在我注意到它非常消耗內存。所以我正在考慮減少內存使用量的方法。

  • 我感動PivotItems加載到IndexChanged事件(所有樞紐項目從基本支點類繼承,並呼籲透視其OnPivotItemActivated(),其中所有的初始化完成)。
  • 現在我正考慮從內存中上傳所有PivotItem的內容,同時轉到詳細信息頁面。我怎樣才能做到這一點?只需將ItemsList設置爲null?

回答

0

簡短的回答是調用

GC.Collect() 

這將調用垃圾收集和清除所有未使用的對象從memory.This也是一個壞主意。

長應答:

.net是一個託管內存環境。這意味着它會在需要更多時自動回收內存。 .Net通過運行其垃圾收集器來回收內存。這裏的垃圾收集器做什麼:

  1. 它停止所有的執行線程在你的應用程序
  2. 它檢查每一個對象在你的應用程序,看看它是否引用或正在使用的CPU。
  3. 那些未使用的對象將從內存中移除,其餘對象會被賦予新的內存地址,以便您的應用程序內存位於單個連續的塊中。

因此,.Net會在需要時回收內存,因此您無需擔心。

如果你真的想這樣做,做手工,在這裏用戶希望應用程序暫停,如一個點:

  • 保存數據
  • 從屏幕X移動到屏幕Y
+0

我擔心的事情是通過事件保留一些未使用的對象的引用,如在這種情況下:http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/02/01 /memory-profiling-for-application-performance.aspx 所以,主要問題是:如果ItemsList = null會是否足夠,或者我還應該通過列表並將所有圖像源設置爲空? 另外,可能,我應該嘗試僅在調試模式下調用GC.Collect(),並查看會發生什麼。 –

+0

如果問題在於您已經通過事件獲取了對象的引用,那麼GC.Collect將無法工作,因爲您已經獲得了對該對象的引用。當你拋棄物體時,你需要在清理過程中刪除對事件的引用。 –

+0

但是有沒有任何引用,會自動出現?另外,什麼是最有效的方法來刪除所有事件訂閱?只是在活動內部取消訂閱?但是,如果事件永遠不會發生呢? –