Unity中有兩種分析內存的方法:
- Memory Profiler :內置的分析器,提供內存使用的基本信息。
- Memory Profiler package:將package添加到項目中,更詳細地分析內存使用情況。可以存儲和比較快照查找內存泄漏,查看內存佈局以查找內存碎片問題。
確定物理RAM限制
每個目標平臺都有一個內存限制,以此爲應用程序設置一個內存預算。使用內存分析器查看捕獲的快照。硬件資源(下圖)顯示RAM和VRAM的大小。這個數字不是基於真實統計的,不是所有空間都可用於使用,它只提供了一個基準數字。
爲每個目標平臺的確定最低支持規格
爲每個平臺確定RAM最低規格的硬件,來指導內存預算。請記住,並不是所有的物理內存都可用。考慮使用一個百分比(例如80%)來進行內存分配。對於移動平臺,還可以考慮將規格分成多個層次,以支持高端設備獲得更好的品質。
內存分析器模塊的簡單和詳細視圖
內存分析器模塊提供兩個視圖:簡單視圖和詳細視圖。使用簡單視圖獲得內存使用情況的總覽圖。必要時,切換到詳細視圖進行深入分析。
使用內存分析器快速收集與資源和場景對象內存分配相關的信息簡單視圖
Total Used Memory是Unity跟蹤的總內存,不包括Unity保留的內存(Total Reserved Memory)。系統使用內存是操作系統認爲應用程序正在使用的內存。如果此數字始終顯示爲0,這表示Profiler計數器在當前正在分析的平臺上沒有實現。在這種情況下,最好依賴Total Reserved Memory。同時建議切換到本平臺的分析工具以獲取詳細的內存信息。
詳細視圖
如果要查看可執行文件、DLL和Mono虛擬機使用了多少內存,逐幀查看內存數據是不夠的。使用詳細快照來深入分析內存分佈。
使用捕獲的樣本分析詳細信息,例如可執行文件和DLL的內存使用情況使用Memory Profiler package進行深入分析
Memory Profiler package可用於進行更詳細的內存分析。使用它來存儲和比較快照,以查找內存泄漏或查看內存佈局以找到優化方向。 Memory Profiler package的一個巨大優勢是,除了捕獲本機對象,它還允許查看託管內存,保存和比較快照,並以更詳細的方式瀏覽內存,以可視化內存使用情況。
Memory Profiler主視圖另外,也可以使用內存分析器模塊中的詳細視圖來深入瞭解內存樹,找出使用最多內存的內容。
內存分析器的許多功能已被Memory Profiler package取代,但仍然可以使用它輔助內存分析。 例如:
- 查找GC分配
- 快速查看堆的使用/保留大小(較新版本的內存分析器)
- 着色器內存分析(較新版本的內存分析器)
在分析內存時需要考慮以下一些要點:
質量級別、圖形層和AssetBundle變量等設置可能在高端設備上具有不同的內存使用情況。例如:
- 質量級別和圖形設置可能會影響shadow map的RenderTextures的大小。
- 分辨率縮放可能會影響屏幕緩衝大小、RenderTextures和後處理效果。
- 紋理質量設置可能會影響所有紋理的大小。
- 最大LOD可能會影響模型等。
- 如果您有類似於高清(High Definition)和標準(Standard Definition)版本的AssetBundle變量,並根據設備規格選擇使用,也可能會獲得不同的資源大小。
- 目標設備的屏幕分辨率將影響用於後處理效果的RenderTextures的大小。
- 設備的圖形API可能會影響着色器的大小,這取決於API對其變體的支持情況。