天天看點

WPF性能調試系列 – 記憶體監測

原文:

WPF性能調試系列 – 記憶體監測

WPF性能調試系列文章:

WPF頁面渲染優化:Application Timeline WPF頁面業務加載優化:Ants Performance Profiler

  

WPF記憶體優化: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性能調試系列 – 記憶體監測

開始執行後,wpf應用會打開執行,操作應用并實時監測記憶體使用情況,對于記憶體使用較高地方進行Take Memory Snapshot:

WPF性能調試系列 – 記憶體監測

注:一次記憶體分析可進行多次記憶體點拍照。比如程式剛運作進行拍照,運作一段時間之後再次拍照,這樣可通過對比兩次拍照的記憶體差别分析出對象占用記憶體情況,更便于分析問題。

一個拍照監測點結果分析:

WPF性能調試系列 – 記憶體監測

可參考具體詳解:

https://documentation.red-gate.com/display/AMP8/The+summary+page

注:1. 托管對象如果記憶體使用過高,考慮是否緩存資料過大,托管資源一般無需過多考慮,可等待.net垃圾回收器進行自行回收。

   2. 非托管資源如果占用記憶體過高,需要進行手動釋放,因為費托管資源是無法自動被.net垃圾回收器回收 – 非托管資源包括:GUI+,圖檔操作,檔案操作,win32調用等

多個拍照監測點結果對比分析:

WPF性能調試系列 – 記憶體監測

具體類視圖分析:

WPF性能調試系列 – 記憶體監測
https://documentation.red-gate.com/display/AMP8/The+class+list

具體對象分析:

WPF性能調試系列 – 記憶體監測
https://documentation.red-gate.com/display/AMP8/The+instance+list

記憶體洩露主要原因分析:靜态引用、未登出的事件綁定、非托管代碼資源使用等。對于靜态對象盡量小或者不用,非托管資源可通過手動Dispose來釋放。