原文:
WPF性能調試系列 – 記憶體監測WPF性能調試系列文章:
WPF頁面渲染優化:Application Timeline WPF頁面業務加載優化:Ants Performance ProfilerWPF記憶體優化:Ants Memory Profiler
記憶體監測(Ants Memory Profiler)
Ants Memory Profiler是專門針對于.net程式的記憶體動态分析工具,通過實時監測WPF程式中每個對象配置設定的記憶體空間大小,來提供多樣式報告展示記憶體的使用情況。我們可根據分析結果進行指定對象的優化。
從RedGate官網下載下傳,下載下傳位址為
http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/模拟分析應用程式
打開Ants Memory Profiler,通過菜單File -> New Profiling Session...(Ctrl+N)打開新的監測會話,在可監測程式類型中選擇.Net executable。
開始執行後,wpf應用會打開執行,操作應用并實時監測記憶體使用情況,對于記憶體使用較高地方進行Take Memory Snapshot:
注:一次記憶體分析可進行多次記憶體點拍照。比如程式剛運作進行拍照,運作一段時間之後再次拍照,這樣可通過對比兩次拍照的記憶體差别分析出對象占用記憶體情況,更便于分析問題。
一個拍照監測點結果分析:
可參考具體詳解:
https://documentation.red-gate.com/display/AMP8/The+summary+page注:1. 托管對象如果記憶體使用過高,考慮是否緩存資料過大,托管資源一般無需過多考慮,可等待.net垃圾回收器進行自行回收。
2. 非托管資源如果占用記憶體過高,需要進行手動釋放,因為費托管資源是無法自動被.net垃圾回收器回收 – 非托管資源包括:GUI+,圖檔操作,檔案操作,win32調用等
多個拍照監測點結果對比分析:
具體類視圖分析:
https://documentation.red-gate.com/display/AMP8/The+class+list具體對象分析:
https://documentation.red-gate.com/display/AMP8/The+instance+list記憶體洩露主要原因分析:靜态引用、未登出的事件綁定、非托管代碼資源使用等。對于靜态對象盡量小或者不用,非托管資源可通過手動Dispose來釋放。