目錄
簡述
Memory Profiler Workflow
查找例子
例子1
例子2
參考連結
簡述
最近在開發的項目運作時發現記憶體在不斷增長,推測是發生了記憶體洩漏。解決記憶體洩露的難點在于找到洩漏的點,隻要找到問題所在,一切就迎刃而解。
Memory Profiler Workflow
Memory Profiler的介紹和查找記憶體洩漏的操作步驟可見Memory Profiler manual,這裡有非常詳細的說明,建議先看再結合實際操作。
簡單來說查找記憶體洩漏的方式就是擷取前後的兩個時間點記憶體快照進行對比,對same和new分組中的條目進行分析,然後對不合理的地方進行排查。
查找例子
例子1
Diff和NativeSize選擇Group,然後對NativeSize降序排序

在new組下發現存在多個同名的Sprite,檢視代碼時注意到在SpriteAtlas擷取Sprite時使用了GetSprite()方法,而這個方法每次都會Clone一個資源在本機堆上,是以當UIImage多次切換時,就造成了洩漏。
例子2
根據Type分組,可以看到有有一個類個數明顯存在異常
點選IPBoat的引用,可以看到是作為一個字典的key被引用,在使用後沒有從字典中移除造成了洩漏
參考連結
Memory Profiler manual: https://docs.unity3d.com/Packages/[email protected]/manual/index.html