天天看點

WPF 記憶體洩漏優化經曆

原文:

WPF 記憶體洩漏優化經曆

最近公司有個CS用戶端程式,有個登入界面,有個程式的主界面,程式支援登出功能,但是在登出後,用戶端的記憶體一直以40M-50M的速度遞增,是以猜測,應該是WPF程式出現了記憶體洩漏。下面主要記錄優化記憶體洩漏的整個曆程:

1.使用VS2013的性能和診斷找到問題點

在VS2013菜單分析-》性能和診斷,打開的界面如下,并勾選記憶體使用率選項。

WPF 記憶體洩漏優化經曆

單擊開始,啟動程式,界面如下所示:

WPF 記憶體洩漏優化經曆

登入後,等待程式資源全部擷取後,單擊VS2013中拍攝快照

WPF 記憶體洩漏優化經曆

登出後,再次單擊拍攝快照按鈕

WPF 記憶體洩漏優化經曆

重複上述兩個步驟若幹次後,關閉軟體,記憶體分析工具會自動進行分析,分析後的結果如下圖所示:

WPF 記憶體洩漏優化經曆

選擇快照報告資料檢視依據,托管堆和堆,我寫的程式中是在堆中發現快照2比快照會有40多M記憶體的上升,上面的圖檔是優化後的。點選上升的記憶體,可以進入快照1和快照2記憶體的對比的表格:

WPF 記憶體洩漏優化經曆

從這個前後記憶體的對比中,找到是由于主界面的在登出時關閉,再次登入後,主界面重新建立顯示,裡面ocx的記憶體發生洩漏。