WPF性能調試系列文章:
WPF頁面渲染優化:Application Timeline
WPF頁面業務加載優化:Ants Performance 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來釋放。