Unity效能分析(三)記憶體分析

Flamesky發表於2024-04-30

Unity中有兩種分析記憶體的方法:

  • Memory Profiler :內建的分析器,提供記憶體使用的基本資訊。
  • Memory Profiler package:將package新增到專案中,更詳細地分析記憶體使用情況。可以儲存和比較快照查詢記憶體洩漏,檢視記憶體佈局以查詢記憶體碎片問題。

確定物理RAM限制

每個目標平臺都有一個記憶體限制,以此為應用程式設定一個記憶體預算。使用記憶體分析器檢視捕獲的快照。硬體資源(下圖)顯示RAM和VRAM的大小。這個數字不是基於真實統計的,不是所有空間都可用於使用,它只提供了一個基準數字。

Unity效能分析(三)記憶體分析

為每個目標平臺的確定最低支援規格

為每個平臺確定RAM最低規格的硬體,來指導記憶體預算。請記住,並不是所有的實體記憶體都可用。考慮使用一個百分比(例如80%)來進行記憶體分配。對於移動平臺,還可以考慮將規格分成多個層次,以支援高階裝置獲得更好的品質。

記憶體分析器模組的簡單和詳細檢視

記憶體分析器模組提供兩個檢視:簡單檢視和詳細檢視。使用簡單檢視獲得記憶體使用情況的總覽圖。必要時,切換到詳細檢視進行深入分析。

Unity效能分析(三)記憶體分析
使用記憶體分析器快速收集與資源和場景物件記憶體分配相關的資訊

簡單檢視

Total Used Memory是Unity跟蹤的總記憶體,不包括Unity保留的記憶體(Total Reserved Memory)。系統使用記憶體是作業系統認為應用程式正在使用的記憶體。如果此數字始終顯示為0,這表示Profiler計數器在當前正在分析的平臺上沒有實現。在這種情況下,最好依賴Total Reserved Memory。同時建議切換到本平臺的分析工具以獲取詳細的記憶體資訊。

詳細檢視

如果要檢視可執行檔案、DLL和Mono虛擬機器使用了多少記憶體,逐幀檢視記憶體資料是不夠的。使用詳細快照來深入分析記憶體分佈。

Unity效能分析(三)記憶體分析
使用捕獲的樣本分析詳細資訊,例如可執行檔案和DLL的記憶體使用情況

使用Memory Profiler package進行深入分析

Memory Profiler package可用於進行更詳細的記憶體分析。使用它來儲存和比較快照,以查詢記憶體洩漏或檢視記憶體佈局以找到最佳化方向。 Memory Profiler package的一個巨大優勢是,除了捕獲本機物件,它還允許檢視託管記憶體,儲存和比較快照,並以更詳細的方式瀏覽記憶體,以視覺化記憶體使用情況。

Unity效能分析(三)記憶體分析
Memory Profiler主檢視

另外,也可以使用記憶體分析器模組中的詳細檢視來深入瞭解記憶體樹,找出使用最多記憶體的內容。

Unity效能分析(三)記憶體分析

記憶體分析器的許多功能已被Memory Profiler package取代,但仍然可以使用它輔助記憶體分析。 例如:

  • 查詢GC分配
  • 快速檢視堆的使用/保留大小(較新版本的記憶體分析器)
  • 著色器記憶體分析(較新版本的記憶體分析器)

在分析記憶體時需要考慮以下一些要點:

質量級別、圖形層和AssetBundle變數等設定可能在高階裝置上具有不同的記憶體使用情況。例如:

  • 質量級別和圖形設定可能會影響shadow map的RenderTextures的大小。
  • 解析度縮放可能會影響螢幕緩衝大小、RenderTextures和後處理效果。
  • 紋理質量設定可能會影響所有紋理的大小。
  • 最大LOD可能會影響模型等。
  • 如果您有類似於高畫質(High Definition)和標準(Standard Definition)版本的AssetBundle變數,並根據裝置規格選擇使用,也可能會獲得不同的資源大小。
  • 目標裝置的螢幕解析度將影響用於後處理效果的RenderTextures的大小。
  • 裝置的圖形API可能會影響著色器的大小,這取決於API對其變體的支援情況。

相關文章