在我們發(fā)布的Unity 2022.2 Tech Stream中,1.0.0版本的Memory Profiler已經(jīng)正式面向所有人開(kāi)放。該版本進(jìn)一步完善了性能分析工具,可描繪更全面的內(nèi)存使用情況,使得性能優(yōu)化與內(nèi)存問(wèn)題檢測(cè)更為方便快捷。
內(nèi)存分析器(Memory Profiler):概覽
應(yīng)用在容量有限的設(shè)備上非常容易出現(xiàn)內(nèi)存溢出甚至崩潰的情況,因此內(nèi)存優(yōu)化至關(guān)重要。如果項(xiàng)目需要發(fā)布至多個(gè)平臺(tái),開(kāi)發(fā)者如何調(diào)整內(nèi)存占用,最大化利用每個(gè)平臺(tái)更是要考慮的重點(diǎn)。
Memory Profiler可以解決以上問(wèn)題,讓用戶能夠截取并審查游戲在特定時(shí)間點(diǎn)的內(nèi)存占用情況。并借助這些“快照”,讓用戶找出游戲中最占內(nèi)存的部分或崩潰的原因。
注:Memory Profiler的完整功能和內(nèi)存跟蹤僅支持2022.2及以上版本,但用戶也可以在2022及以上的空項(xiàng)目里打開(kāi)窗口、導(dǎo)入舊版快照,再用新界面進(jìn)行分析。
工具的發(fā)展歷程
Memory Profiler最初是作為試驗(yàn)包發(fā)布的,在這次的新版本中,我們聽(tīng)取了多位早期用戶的反饋意見(jiàn),大幅修改了UI和UX,使其更加易用。
因此,在開(kāi)發(fā)新版本時(shí),Unity設(shè)立了以下幾個(gè)目標(biāo):
1、簡(jiǎn)化最常見(jiàn)、最重要的使用流程,讓問(wèn)題的識(shí)別和修復(fù)更快
2、提供更全面和可靠的信息,使多種設(shè)備(使用平臺(tái)專用的分析器)的內(nèi)存占用對(duì)比更簡(jiǎn)單
3、用更易理解的方式呈現(xiàn)信息,讓缺乏專業(yè)知識(shí)的用戶同樣能有效地優(yōu)化應(yīng)用
為實(shí)現(xiàn)目標(biāo),Unity與早期用戶緊密合作來(lái)了解他們的需求和痛點(diǎn),推出數(shù)代設(shè)計(jì)直至達(dá)成最佳的用戶體驗(yàn)。
得益于這些用戶的反饋,Unity團(tuán)隊(duì)極大地精簡(jiǎn)了工具,移除了不少術(shù)語(yǔ),使對(duì)象、細(xì)節(jié)信息和依賴項(xiàng)的檢查更為輕松。
工具內(nèi)容
Memory Profiler由三部分組成,每部分都用上了改進(jìn)后的新UI:
1、快照列表(Snapshot list)
2、主窗口,被分為三種工作視圖:摘要(Summary)、Unity對(duì)象(Unity Objects)和總內(nèi)存(All of Memory)
3、所選對(duì)象細(xì)節(jié)
快照列表
快照列表保存了用戶在游戲中截取的快照,以及內(nèi)存使用、截圖日期等信息。用戶可以使用工具欄的“Capture”,或者主窗口上的快照按鈕,來(lái)截取快照。
對(duì)比多張快照可檢查內(nèi)存占用是否有變化,并了解項(xiàng)目性能是否有提升。
最后,用戶也能在快照列表里查看單張快照或?qū)Ρ葦?shù)張快照(下文將將詳細(xì)介紹)。
主窗口
主窗口是Memory Profiler的核心區(qū)域,它被分為三個(gè)視圖:摘要(Summary)、Unity對(duì)象(Unity Objects)和總內(nèi)存(All of Memory)每個(gè)視圖都可在主窗口頂部打開(kāi)。
摘要(Summary)視圖是加載或截取快照時(shí)的默認(rèn)視圖。它提供了當(dāng)前內(nèi)存占用、設(shè)備“常駐”內(nèi)存以及提交但未使用的內(nèi)存等信息。內(nèi)存會(huì)被分成多個(gè)類型,以方便用戶開(kāi)始調(diào)查。
最后,摘要(Summary)視圖是開(kāi)展詳細(xì)分析,如“占內(nèi)存最大的Unity對(duì)象”或“托管內(nèi)存拆分”等的入口。
Unity對(duì)象(Unity Objects)視圖應(yīng)該是最常用的視圖。它列出了所有加載到內(nèi)存的對(duì)象,如紋理、著色器、字體等。用戶通??梢栽诖颂幷页瞿男?duì)象過(guò)大,哪些是錯(cuò)誤加載的,或者哪些一直被引用、保留在內(nèi)存里的。
總內(nèi)存(All of Memory)視圖支持查看分過(guò)類的所有內(nèi)存——包括本機(jī)內(nèi)存(Native)、托管內(nèi)存(Managed)、圖形內(nèi)存(Graphics)和可執(zhí)行文件內(nèi)存(Executables)。用戶可以在此查看Memory Priofiler捕捉的數(shù)據(jù),調(diào)查應(yīng)用的特定方面,了解項(xiàng)目?jī)?nèi)存由哪些東西組成。
所選對(duì)象細(xì)節(jié)(Selection details)視圖
所選對(duì)象細(xì)節(jié)(Selection details)提供了主屏幕被選中對(duì)象的詳細(xì)信息,包括內(nèi)存類別的描述、對(duì)象的潛在引用或詳情。
更多的信息可幫用戶了解查看的對(duì)象,以及它為何出現(xiàn)在內(nèi)存中。并且,如果編輯器打開(kāi)了一個(gè)項(xiàng)目,用戶可以“ping”出對(duì)象,直接在場(chǎng)景或項(xiàng)目窗口檢查資產(chǎn)。
對(duì)比快照
以上所有視圖都能用于檢查單張快照或?qū)Ρ榷鄰埧煺铡?/p>
如果要對(duì)比一張快照,請(qǐng)選擇列表中的“Compare”,再選取第二張快照。打開(kāi)對(duì)比欄時(shí)所有視圖都會(huì)自動(dòng)轉(zhuǎn)換成對(duì)比模式。
對(duì)比模式下,摘要(Summary)視圖將并排顯示兩張截圖的內(nèi)存分析,方便對(duì)比兩者內(nèi)存占用的主要不同(對(duì)比雙方會(huì)被稱為“A”和“B”)。
Unity對(duì)象(Unity Objects)和總內(nèi)存(All of Memory)視圖帶有一種新的專用UI,讓用戶能查看各類內(nèi)存的大小變化或?qū)ο蟮臄?shù)量變化。
在上方選取一個(gè)類別,用戶就能在下方圖表中查看A與B單個(gè)類別上的不同。
如果想重新檢查單張快照,用戶可以選擇列表的“Single”。第二張對(duì)比照仍會(huì)保留,方便用戶快速在兩個(gè)視圖間切換。
了解Unity內(nèi)存及其優(yōu)化方法
在未來(lái),Unity計(jì)劃提供更多資源與信息,來(lái)介紹如何識(shí)別常見(jiàn)的內(nèi)存問(wèn)題以及Unity內(nèi)存的工作方式,幫助用戶學(xué)習(xí)高效的內(nèi)存優(yōu)化。