Unity性能分析(三)內存分析

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對其變體的支持情況。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章