02. 內(nèi)存分析

這是摘自Unity官方文檔有關(guān)優(yōu)化的部分焦匈,原文鏈接:https://docs.unity3d.com/Manual/BestPracticeUnderstandingPerformanceInUnity.html
總共分為如下系列:

  1. 采樣分析
  2. 內(nèi)存部分
  3. 協(xié)程
  4. Asset審查
  5. 理解托管堆 【推薦閱讀】
    5.1 上篇:原理嗡害,臨時分配內(nèi)存盛险,集合和數(shù)組
    5.2 下篇:閉包,裝箱邢享,數(shù)組
  6. 字符串和文本
  7. 資源目錄
  8. 通用的優(yōu)化方案
  9. 一些特殊的優(yōu)化方案

內(nèi)存消耗是關(guān)鍵的性能指標趣竣,尤其對于在內(nèi)存資源非常有限的設(shè)備上蓖租,如移動設(shè)備。

剖析內(nèi)存消耗

分析內(nèi)存問題最好的工具是Unity在Bitbucket上開源的工具:
https://bitbucket.org/Unity-Technologies/memoryprofiler饭玲。
只需要下載對應(yīng)的代碼倉庫將其放到項目中的Editor目錄下即可侥祭。

注意,這個工具在Unity5.3之后的版本都可以使用茄厘,如果應(yīng)用是用IL2CPP打包的矮冬,它可以提取原生代碼和托管代碼的內(nèi)存消耗信息。

使用這個工具次哈,需要使用IL2CPP工具進行打包并且發(fā)布到合適的設(shè)備上胎署,然后連接上編輯器中的CPU剖析工具,打開內(nèi)存剖析界面(Window > MemoryProfilerWindow)選擇Take Snapshot窑滞。

設(shè)備上收集數(shù)據(jù)琼牧,并將這些數(shù)據(jù)發(fā)送給Unity編輯器,應(yīng)用會暫停一段時間葛假。然后Unity編輯器開始分析數(shù)據(jù)障陶,這也需要比較久的時間。對于內(nèi)存比較敏感的應(yīng)用聊训,這個過程可能需要10-30分鐘完成抱究。

在解析數(shù)據(jù)和加載的過程中,建議各位耐心等待带斑。

image.png

上面的截圖來自于iOS設(shè)備上運行的標準Asset場景鼓寺,顯示了四分之三多的內(nèi)存給了四個非常大的飛行器的機身紋理貼圖勋拟。

這個可視化的工具也可以被放大。點擊每個方塊可以獲得更多的相關(guān)信息妈候。

定位重復(fù)的紋理

最常見的內(nèi)存問題是在內(nèi)存中的資源重復(fù)敢靡。紋理是最占內(nèi)存開銷的資源類型,紋理重復(fù)是Unity項目中最常見的問題苦银。

如果兩個對象是相同大小啸胧,相同類型,那么很有可能這兩個對象是從同一個Asset加載進來的幔虏。在新的內(nèi)存剖析器中纺念,可以通過Name和InstanceID觀察查看資源。

Name是加載進來的Asset文件的名稱想括,通常不帶路徑名和后綴陷谱。InstanceID是Unity采用的內(nèi)部識別編號,在Unity運行的過程中瑟蜈,這個編號是獨一無二的烟逊。

image.png

這張圖示范了資源重復(fù)的一個例子。圖形的左邊和右邊是從Unity5.4的內(nèi)存剖析器中的某個細節(jié)面板铺根。兩張圖的Asset實際上是內(nèi)存中兩個分開加載的紋理資源宪躯,名字和大小相同∫亩迹可以在Assets目錄下搜索資源名字眷唉,確認是否只有一個資源較這個名字,從而確定是不是資源重復(fù)加載囤官。

內(nèi)存中每個獨立的UnityEngine.Object都有獨特的instance ID冬阳,當Object被創(chuàng)建的時候指定。這兩個紋理有不同的Instance IDs党饮,所以它們代表了兩份不同的紋理數(shù)據(jù)肝陪。

因為Asset的大小和名稱相同,而InstanceID不同刑顺,所以可以確定一個紋理被加載了兩次氯窍。雖然有可能會出現(xiàn)兩個同名的資源文件,所以還是按照文件大小來判定蹲堂。
AssetBundle和Asset重復(fù)
紋理資源和Asset重復(fù)的最大原因是AssetBundle的不合理使用狼讨。可以參見AssetBundle相關(guān)的知道柒竞。關(guān)鍵章節(jié)是管理已經(jīng)加載的Asset政供。

檢查圖片緩沖區(qū),圖片效果和RenderTexture內(nèi)存使用

同樣也可以在剖析器中看到為圖片效果和RenderTexture提供渲染緩沖區(qū)占用的內(nèi)存大小。

image.png

上面的截圖展示了使用了Unity電影圖片效果的一個場景的內(nèi)存剖析器的情況布隔。這個圖片效果分配了臨時渲染緩沖區(qū)离陶,而且Bloom效果分配了多個緩沖區(qū)。因為iOS設(shè)備的高分辨率衅檀,這些臨時緩沖區(qū)占用了非常多的內(nèi)存招刨,比項目中剩下的占用的總數(shù)還多。

考慮到iPad Air2的分辨率是2048x1536哀军,比大部分終端設(shè)備和PC的1080p的分辨率高出了很多沉眶。全屏的臨時渲染緩沖區(qū)差不多消耗24MB~36MB,取決于緩沖區(qū)的格式排苍。降低渲染緩沖區(qū)的像素大小可以節(jié)省75%的內(nèi)存消耗沦寂,同時也不會對最終的效果造成很大的影響学密。

優(yōu)化圖片效果淘衙,減少臨時緩沖區(qū)和其他的GPU資源的消耗另一個優(yōu)化方法是創(chuàng)建單個“uber”圖像效果一次執(zhí)行所有不相干的計算。如果使用Unity5.5或者更新的版本腻暮,可以使用新的UberFX彤守。
參見資料:https://github.com/Unity-Technologies/PostProcessing
這個例子提供了一個可以配置化的“uber”圖片效果,可以執(zhí)行Cinematic Image Effect的所有操作哭靖,相比普通的獨立Image Effect可以節(jié)省不少資源具垫。

上篇:采樣分析
下篇:協(xié)程

如果覺得文章對您有用,請點個贊唄试幽!???

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筝蚕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铺坞,更是在濱河造成了極大的恐慌起宽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件济榨,死亡現(xiàn)場離奇詭異坯沪,居然都是意外死亡,警方通過查閱死者的電腦和手機擒滑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門腐晾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丐一,你說我怎么就攤上這事藻糖。” “怎么了库车?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵巨柒,是天一觀的道長。 經(jīng)常有香客問我,道長潘拱,這世上最難降的妖魔是什么疹鳄? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮芦岂,結(jié)果婚禮上瘪弓,老公的妹妹穿的比我還像新娘。我一直安慰自己禽最,他們只是感情好腺怯,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著川无,像睡著了一般呛占。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懦趋,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天晾虑,我揣著相機與錄音,去河邊找鬼仅叫。 笑死帜篇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的诫咱。 我是一名探鬼主播笙隙,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坎缭!你這毒婦竟也來了竟痰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤掏呼,失蹤者是張志新(化名)和其女友劉穎坏快,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哄尔,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡假消,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岭接。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片富拗。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸣戴,靈堂內(nèi)的尸體忽然破棺而出啃沪,到底是詐尸還是另有隱情,我是刑警寧澤窄锅,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布创千,位于F島的核電站缰雇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏追驴。R本人自食惡果不足惜械哟,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殿雪。 院中可真熱鬧暇咆,春花似錦、人聲如沸丙曙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亏镰。三九已至扯旷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間索抓,已是汗流浹背钧忽。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纸兔,地道東北人惰瓜。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像汉矿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子备禀,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容