2013-10-03 34 views
0

我仍在與內存泄漏戰鬥。使用改進的MemoryDiagnosticsHelper,我增加了製作數據庫以查看即時內存消耗的可能性。應用程序加載階段和內存泄漏狩獵

問題從完整的應用程序開始:我有3個項目的樞軸,其中2個包含10-20個對象列表(有可能跳轉到項目詳細信息)。內存診斷顯示,它消耗大約50Mb的內存。在跳轉到詳細頁面並返回樞紐後,內存消耗容易增長到70Mb。

首先,我將列表移動到單獨的應用程序。沒有風格,它需要15 Mbs。我沒有檢查,但我認爲,在樞軸2列表將需要約20Mbs,因爲DLL已經加載。

所以,我決定去更深入的應用程序加載階段。

  • 在InitializePhoneApplication(),它需要7 Mb。
  • 在CompleteInitializePhoneApplication()中,它帶有空的ViewModelLocator 8.5 MB,或帶有所有視圖模型的10.5 Mb。相當大,但我有30-40數據服務和40-50視圖模型。所以,讓它成爲,如果它不再成長,我會覺得自己很好。
  • 在第一頁的的OnNavigatedTo(),它需要幾乎是相同的,還挺10.7 MB所有的虛擬機,這是確定。
  • ???
  • 沒有利潤。嚴重的是,接下來會發生什麼?我不知道接下來究竟發生了什麼,但是MemoryDiagnosticsHelper說,內存消耗會跳到30 Mbs。爲什麼?所有的dll和虛擬機已經加載。我只是加載一個非常空白的頁面,完全是白色的。

事件探查器(當然運行在發佈模式),也是無奈。它只是顯示內存消耗的增長,但它發生在非管理內存中。它真的很煩人。

enter image description here

好吧,讓使問題更乾淨。接下來會發生什麼,當應用程序初始化(通過初始化,視圖模型加載和附加,頁面傳遞OnNavigatedTo())?編輯1:在夜晚,我得到了主意,我的應用程序中唯一的薄弱部分(至少,主要細節頁面)是MVVMLight的EventToCommand。幾乎在谷歌的第一篇文章是http://atomaras.wordpress.com/2012/04/23/solving-mvvmlights-eventtocommand-memory-leak-wp7/有人知道,如果它alreasy固定?我檢查了MvvmLight的博客,看起來像Laurent現在正在開發安裝程序。這讓我想到,這個泄漏應該已經解決了,不是嗎?

編輯2:我看到2解決方案泄漏問題:要麼使用上面的鏈接修復,要麼從代碼隱藏調用命令。或者使用另一個MVVM庫。

+0

我不確定我是否明白問題所在。基本上,你在抱怨的內存不下去,你從詳細信息頁面回去後,還是被你抱怨的內存使用量? –

+0

兩者,實際上。首先它的原因是:當我在主要細節頁面之間跳躍時,內存量正在增長。沒有那麼快,乍一看似乎還可以(有點大師50,細節35,大師50,細節37,大師53,細節35,上)。起初,我認爲這是暫時的,但主頁上已用內存的數量穩步增長。其次是後果:當我試圖在每個時刻看內存使用量時,我發現在整個應用程序被加載後,即使是空頁面,仍然有顯着的內存消耗跳躍。 –

+1

@VitaliiVasylenko上次我在windows phone(這是幾個月前)使用MvvmLight中的EventToCommand時,泄漏仍然存在,一個簡單的解決方法就是使用i:InvokeCommandAction從命名空間xmlns:i =「clr-namespace:System。 Windows.Interactivity;程序集= System.Windows.Interactivity「沒有這個問題 –

回答

0

參考文獻。

我希望他們能夠在應用程序初始化的第一階段裝入smoothier。此外,現在很清楚,爲什麼探查器說內存中沒有那麼多託管代碼。