1.介紹
Memory Profiler允許分析項目的內存使用情況,以查找泄漏和碎片。內存泄漏可能發生在分配內存時,但在不再需要內存后未進行處理。隨着內存耗盡,程序性能會惡化,最終導致程序(甚至主機設備)崩潰。當內存分配在許多小塊中,而不是更少的大型連續塊時,它被稱為內存碎片。這將導致分配塊之間的未分配內存小范圍變得不可用。
Memory Profiler是審核項目的內存使用情況的好方法。 您不僅可以查看消耗最大內存的內容,還可以查看項目使用或濫用內存的方式。 內存泄漏和碎片是影響項目性能的兩個最常見的問題,並且Memory Profiler使解決這些問題變得容易。
unity learn相關鏈接:https://learn.unity.com/tutorial/working-with-the-memory-profiler-2019-3?language=en#5e3064d6edbc2a6cb3b2b65e
2.安裝內存探查器
Unity 編輯器中package manager->advanced->show preview package->memory profiler->install.
安裝完之后,應該可以在window中找到analysis->memory profiler 。
3.獲得內存snapshot
Memory Profiler可以在本地計算機上或為它提供聯網計算機的特定IP地址,以當前正在運行的開發版本為目標。
1.必須先選擇一個目標,然后才能捕獲內存快照。 默認情況下,Unity編輯器是目標。
2.要選擇一個新目標,請單擊Memory Profiler左上角的下拉菜單。
單擊capture按鈕,以從選定目標中捕獲當前的內存配置文件。 注意capture本身會消耗一些內存。 在某些情況下,這可能會導致目標在內存不足時凍結或崩潰。
Memory Profiler可以針對本地或網絡構建的開發,Unity編輯器或Bitbucket Profiler中的內存情況。
單擊“ Memory Profiler”窗口頂部的“import”按鈕。
使用“Import snapshot file”對話框右下角的文件格式下拉列表,選擇要導入的內存快照的格式。 選項包括使用Memory Profiler捕獲的.snap文件和使用Bitbucket Memory Profiler捕獲的.memsnap *。
找到並選擇你的snapshot。 單擊打開。
第一次捕獲內存快照時,將創建一個名為MemoryCaptures的文件夾(位於Assets文件夾的同一級別,而不是在其中)。 您也可以將“內存快照”放到該文件夾中以使其可訪問。
4.查看 memory snapshot
捕獲或導入后(包括將快照移動到MemoryCaptures文件夾中),快照將在Memory Profiler窗口的左列中可見。 單擊“打開”以查看“內存配置文件”
默認和最直觀的視圖是樹形圖(下圖)。 在此視圖中,每種元素類型使用的內存量均按比例表示。 在我們的示例中,126個着色器共同消耗80 MB的內存。
要更詳細地查看類別,請單擊該類別以顯示所有成員元素及其各自的內存占用量。 更詳細的信息將在表格的樹形圖下方顯示。 單擊標題以按值或組對表進行排序。
位於樹圖和內存圖下方的表格視圖提供了有關各個元素的內存使用情況的更詳細信息。更為直接的視圖“memory map”以不同的顏色顯示內存布局
代表不同類型的內存。 這對於查找內存碎片很有幫助。
“memory map”是項目虛擬內存布局的更直接表示。
5.找到內存泄漏
1.啟動播放器,將其設置為Memory Profiler目標,並拍攝一個空場景的快照。
2.加載要測試的場景。 播放一些場景以加載必要的資產。
3.通過調用Resources.UnloadUnusedAssets()或兩次加載/創建一個空場景來卸載場景。
4.拍攝另一個快照,然后退出播放模式。
5.在工作台中,加載第一個屏幕截圖,然后加載第二個屏幕截圖,然后單擊“diff”。 Unity將計算兩個屏幕截圖之間的差異。 這可能需要幾秒鍾,具體取決於snapshot的大小。
6.在“table”視圖中,單擊“diff”列的標題,然后選擇group。
7.entries將被分組:兩個快照中的條目相同,從第一個快照中刪除,然后新建。 new entries是潛在的內存泄漏。