天天看點

Unity Memory Profiler 查找記憶體洩漏簡述Memory Profiler Workflow查找例子參考連結

目錄

簡述

Memory Profiler Workflow

查找例子

例子1

例子2

參考連結

簡述

最近在開發的項目運作時發現記憶體在不斷增長,推測是發生了記憶體洩漏。解決記憶體洩露的難點在于找到洩漏的點,隻要找到問題所在,一切就迎刃而解。

Memory Profiler Workflow

Memory Profiler的介紹和查找記憶體洩漏的操作步驟可見Memory Profiler manual,這裡有非常詳細的說明,建議先看再結合實際操作。

簡單來說查找記憶體洩漏的方式就是擷取前後的兩個時間點記憶體快照進行對比,對same和new分組中的條目進行分析,然後對不合理的地方進行排查。

查找例子

例子1

Diff和NativeSize選擇Group,然後對NativeSize降序排序

Unity Memory Profiler 查找記憶體洩漏簡述Memory Profiler Workflow查找例子參考連結

在new組下發現存在多個同名的Sprite,檢視代碼時注意到在SpriteAtlas擷取Sprite時使用了GetSprite()方法,而這個方法每次都會Clone一個資源在本機堆上,是以當UIImage多次切換時,就造成了洩漏。

Unity Memory Profiler 查找記憶體洩漏簡述Memory Profiler Workflow查找例子參考連結

例子2

根據Type分組,可以看到有有一個類個數明顯存在異常

Unity Memory Profiler 查找記憶體洩漏簡述Memory Profiler Workflow查找例子參考連結

點選IPBoat的引用,可以看到是作為一個字典的key被引用,在使用後沒有從字典中移除造成了洩漏

Unity Memory Profiler 查找記憶體洩漏簡述Memory Profiler Workflow查找例子參考連結

參考連結

Memory Profiler manual: https://docs.unity3d.com/Packages/[email protected]/manual/index.html

繼續閱讀