記一次基于Unity的Profiler性能分析

A. WaitForTargetFPS:?

? ? ? Vsync(垂直同步)功能所驰徊,即顯示當(dāng)前幀的CPU等待時(shí)間?

? ?B. Overhead:?

? ? ? Profiler總體時(shí)間-所有單項(xiàng)的記錄時(shí)間總和锤躁。用于記錄尚不明確的時(shí)間消耗,以幫助進(jìn)一步完善Profiler的統(tǒng)計(jì)蚂子。?

? ? ? ? C. Physics.Simulate:?

? ? ? 當(dāng)前幀物理模擬的CPU占用時(shí)間泛粹。?

? ?D. Camera.Render:?

? ? ? 相機(jī)渲染準(zhǔn)備工作的CPU占用量?

? ?E. RenderTexture.SetActive:?

? ? ? 設(shè)置RenderTexture操作.?

? ? ? 底層實(shí)現(xiàn):1.比對(duì)當(dāng)前幀與前一幀的ColorSurface和DepthSurface.?

? ? ? ? ? ? ? ?2.如果這兩個(gè)Buffer一致則不生成新的RT埃儿,否則則生成新的RT,并設(shè)置與之相對(duì)應(yīng)的Viewport和空間轉(zhuǎn)換矩陣.?

? ?F. Monobehaviour.OnMouse_ :?

? ? ? 用于檢測(cè)鼠標(biāo)的輸入消息接收和反饋宴胧,主要包括:SendMouseEvents和DoSendMouseEvents漱抓。(只要Edtor開起來,這個(gè)就會(huì)存在)?

? ?G. HandleUtility.SetViewInfo:?

? ? ? 僅用于Editor中恕齐,作用是將GUI和Editor中的顯示看起來與發(fā)布版本的顯示一致乞娄。?

H. GUI.Repaint:?

? ? ? GUI的重繪(說明在有使用原生的OnGUI)?

? ?I. Event.Internal_MakeMasterEventCurrent:?

? ? ? 負(fù)責(zé)GUI的消息傳送?

? ?J. Cleanup Unused Cached Data:?

? ? ? 清空無用的緩存數(shù)據(jù),主要包括RenderBuffer的垃圾回收和TextRendering的垃圾回收檐迟。?

? ? ? ? ?1.RenderTexture.GarbageCollectTemporary:存在于RenderBuffer的垃圾回收中补胚,清除臨時(shí)的FreeTexture.?

? ? ? ? ?2.TextRendering.Cleanup:TextMesh的垃圾回收操作?

? ?K. Application.Integrate Assets in Background:?

? ? ? 遍歷預(yù)加載的線程隊(duì)列并完成加載,同時(shí)追迟,完成紋理的加載溶其、Substance的Update等.?

? ?L. Application.LoadLevelAsync Integrate:?

? ? ? 加載場(chǎng)景的CPU占用,通常如果此項(xiàng)時(shí)間長(zhǎng)的話70%的可能是Texture過長(zhǎng)導(dǎo)致.?

? ?M. UnloadScene:?

? ? ? 卸載場(chǎng)景中的GameObjects敦间、Component和GameManager瓶逃,一般用在切換場(chǎng)景時(shí).?

? ?N. CollectGameObjectObjects:?

? ? ? 執(zhí)行上面M項(xiàng)的同時(shí),會(huì)將場(chǎng)景中的GameObject和Component聚集到一個(gè)Array中.然后執(zhí)行下面的Destroy.?

? ?O. Destroy:?

? ? ? 刪除GameObject和Component的CPU占用.?

? ?P. AssetBundle.LoadAsync Integrate:?

? ? ? 多線程加載AwakeQueue中的內(nèi)容廓块,即多線程執(zhí)行資源的AwakeFromLoad函數(shù).?

? ?Q. Loading.AwakeFromLoad:?

? ? ? 在資源被加載后調(diào)用厢绝,對(duì)每種資源進(jìn)行與其對(duì)應(yīng)用處理.?

2. CPU Usage?

? ?A. Device.Present:?

? ? ? device.PresentFrame的耗時(shí)顯示,該選項(xiàng)出現(xiàn)在發(fā)布版本中.?

? ?B. Graphics.PresentAndSync:?

? ? ? GPU上的顯示和垂直同步耗時(shí).該選項(xiàng)出現(xiàn)在發(fā)布版本中.?

? ?C. Mesh.DrawVBO:?

? ? ? GPU中關(guān)于Mesh的Vertex Buffer Object的渲染耗時(shí).?

? ?D. Shader.Parse:?

? ? ? 資源加入后引擎對(duì)Shader的解析過程.?

? ?E. Shader.CreateGPUProgram:?

? ? ? 根據(jù)當(dāng)前設(shè)備支持的圖形庫來建立GPU工程.?

3. Memory Profiler?

? ?A. Used Total:?

? ? ? 當(dāng)前幀的Unity內(nèi)存带猴、Mono內(nèi)存昔汉、GfxDriver內(nèi)存、Profiler內(nèi)存的總和.?

? ?B. Reserved Total:?

? ? ? 系統(tǒng)在當(dāng)前幀的申請(qǐng)內(nèi)存.?

? ?C. Total System Memory Usage:?

? ? ? 當(dāng)前幀的虛擬內(nèi)存使用量.(通常是我們當(dāng)前使用內(nèi)存的1.5~3倍)?

? ?D. GameObjects in Scene:?

? ? ? 當(dāng)前幀場(chǎng)景中的GameObject數(shù)量.?

? ?E. Total Objects in Scene:?

? ? ? 當(dāng)前幀場(chǎng)景中的Object數(shù)量(除GameObject外拴清,還有Component等).?

? ?F. Total Object Count:?

? ? ? Object數(shù)據(jù) + Asset數(shù)量.?

4. Detail Memory Profiler?

? ?A. Assets:?

? ? ? Texture2d:記錄當(dāng)前幀內(nèi)存中所使用的紋理資源情況靶病,包括各種GameObject的紋理、天空盒紋理以及場(chǎng)景中所用的Lightmap資源.?

? ?B. Scene Memory:?

? ? ? 記錄當(dāng)前場(chǎng)景中各個(gè)方面的內(nèi)存占用情況口予,包括GameObject娄周、所用資源、各種組件以及GameManager等(天般情況通過AssetBundle加載的不會(huì)顯示在這里).?

? ?A. Other:?

? ? ? ManagedHeap.UseSize:代碼在運(yùn)行時(shí)造成的堆內(nèi)存分配沪停,表示上次GC到目前為止所分配的堆內(nèi)存量.?

? ? ? SerializedFile(3):?

? ? ? WebStream:這個(gè)是由WWW來進(jìn)行加載的內(nèi)存占用.?

? ? ? System.ExecutableAndDlls:不同平臺(tái)和不同硬件得到的值會(huì)不一樣煤辨。?


5. 優(yōu)化重點(diǎn)?

? ?A. CPU-GC Allow:?

? ? ? 關(guān)注原則:1.檢測(cè)任何一次性內(nèi)存分配大于2KB的選項(xiàng) 2.檢測(cè)每幀都具有20B以上內(nèi)存分配的選項(xiàng).?

? ?B. Time ms:?

? ? ? 記錄游戲運(yùn)行時(shí)每幀CPU占用(特別注意占用5ms以上的).?

? ?C. Memory Profiler-Other:?

? ? ? 1.ManagedHeap.UsedSize: 移動(dòng)游戲建議不要超過20MB.?

? ? ? 2.SerializedFile: 通過異步加載(LoadFromCache裳涛、WWW等)的時(shí)候留下的序列化文件,可監(jiān)視是否被卸載.?

? ? ? 3.WebStream: 通過異步WWW下載的資源文件在內(nèi)存中的解壓版本,比SerializedFile大幾倍或幾十倍,重點(diǎn)監(jiān)視.****?

? ?D. Memory Profiler-Assets:?

? ? ? 1.Texture2D: 重點(diǎn)檢查是否有重復(fù)資源和超大Memory是否需要壓縮等.?

? ? ? 2.AnimationClip: 重點(diǎn)檢查是否有重復(fù)資源.?

? ? ? 3.Mesh: 重點(diǎn)檢查是否有重復(fù)資源.?

6. 項(xiàng)目中可能遇到的問題?

? ?A. Device.Present:?

? ? ? 1.GPU的presentdevice確實(shí)非常耗時(shí),一般出現(xiàn)在使用了非常復(fù)雜的shader.?

? ? ? 2.GPU運(yùn)行的非持诒妫快端三,而由于Vsync的原因,使得它需要等待較長(zhǎng)的時(shí)間.?

? ? ? 3.同樣是Vsync的原因泻轰,但其他線程非常耗時(shí)技肩,所以導(dǎo)致該等待時(shí)間很長(zhǎng),比如:過量AssetBundle加載時(shí)容易出現(xiàn)該問題.?

? ? ? 4.Shader.CreateGPUProgram:Shader在runtime階段(非預(yù)加載)會(huì)出現(xiàn)卡頓(華為K3V2芯片).?

? ?B. StackTraceUtility.PostprocessStacktrace()和StackTraceUtility.ExtractStackTrace():?

? ? ? 1.一般是由Debug.Log或類似API造成.?

? ? ? 2.游戲發(fā)布后需將Debug API進(jìn)行屏蔽.?

? ?C. Overhead:?

? ? ? 1.一般情況為Vsync所致.?

? ? ? 2.通常出現(xiàn)在Android設(shè)備上.?

? ?D. GC.Collect:?

? ? ? 原因: 1.代碼分配內(nèi)存過量(惡性的) 2.一定時(shí)間間隔由系統(tǒng)調(diào)用(良性的).?

? ? ? 占用時(shí)間:1.與現(xiàn)有Garbage size相關(guān) 2.與剩余內(nèi)存使用顆粒相關(guān)(比如場(chǎng)景物件過多浮声,利用率低的情況下,GC釋放后需要做內(nèi)存重排)?

? ?E. GarbageCollectAssetsProfile:?

? ? ? 1.引擎在執(zhí)行UnloadUnusedAssets操作(該操作是比較耗時(shí)的,建議在切場(chǎng)景的時(shí)候進(jìn)行).?

? ? ? 2.盡可能地避免使用Unity內(nèi)建GUI旋奢,避免GUI.Repaint過渡GC Allow.?

? ? ? 3.if(other.tag == GearParent.MogoPlayerTag)改為other.CompareTag(GearParent.MogoPlayerTag).因?yàn)閛ther.tag為產(chǎn)生180B的GC Allow.?

? ?F. 少用foreach泳挥,因?yàn)槊看蝔oreach為產(chǎn)生一個(gè)enumerator(約16B的內(nèi)存分配),盡量改為for.?

? ?G. Lambda表達(dá)式至朗,使用不當(dāng)會(huì)產(chǎn)生內(nèi)存泄漏.?

? ?H. 盡量少用LINQ:?

? ? ? 1.部分功能無法在某些平臺(tái)使用.?

? ? ? 2.會(huì)分配大量GC Allow.?

? ?I. 控制StartCoroutine的次數(shù):?

? ? ? 1.開啟一個(gè)Coroutine(協(xié)程)屉符,至少分配37B的內(nèi)存.?

? ? ? 2.Coroutine類的實(shí)例 -- 21B.?

? ? ? 3.Enumerator -- 16B.?

? ?J. 使用StringBuilder替代字符串直接連接.?

? ?K. 緩存組件:?

? ? ? 1.每次GetComponent均會(huì)分配一定的GC Allow.?

? ? ? 2.每次Object.name都會(huì)分配39B的堆內(nèi)存.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锹引,隨后出現(xiàn)的幾起案子矗钟,更是在濱河造成了極大的恐慌,老刑警劉巖嫌变,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吨艇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡腾啥,警方通過查閱死者的電腦和手機(jī)东涡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倘待,“玉大人疮跑,你說我怎么就攤上這事⊥苟妫” “怎么了祖娘?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)啊奄。 經(jīng)常有香客問我渐苏,道長(zhǎng),這世上最難降的妖魔是什么增热? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任整以,我火速辦了婚禮,結(jié)果婚禮上峻仇,老公的妹妹穿的比我還像新娘公黑。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布凡蚜。 她就那樣靜靜地躺著人断,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朝蜘。 梳的紋絲不亂的頭發(fā)上恶迈,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音谱醇,去河邊找鬼暇仲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛副渴,可吹牛的內(nèi)容都是我干的奈附。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼煮剧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼斥滤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勉盅,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤佑颇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后草娜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挑胸,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年驱还,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗜暴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡议蟆,死狀恐怖闷沥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咐容,我是刑警寧澤舆逃,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站戳粒,受9級(jí)特大地震影響路狮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔚约,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一奄妨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苹祟,春花似錦砸抛、人聲如沸评雌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽景东。三九已至,卻和暖如春奔誓,著一層夾襖步出監(jiān)牢的瞬間斤吐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工厨喂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留和措,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓杯聚,卻偏偏與公主長(zhǎng)得像臼婆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子幌绍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • 原文地址 http://www.fx114.net/qa-75-172454.aspx 使用Profiler工具...
    IongX閱讀 5,858評(píng)論 1 11
  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 13,046評(píng)論 3 90
  • 轉(zhuǎn)載http://wetest.qq.com/lab/view/315.html 移動(dòng)平臺(tái)硬件架構(gòu) 移動(dòng)平臺(tái)無論是...
    李嘉的博客閱讀 1,712評(píng)論 0 4
  • 今天也挺急的故响,就配了幾個(gè)音傀广,之后,配了幾個(gè)喜馬拉雅彩届。之后就彈了一會(huì)兒琴伪冰,之后就和幾個(gè)叔叔一起去吃飯,回來大概就兩點(diǎn)...
    蜜糖吖閱讀 135評(píng)論 0 1
  • 秋假的第一天樟蠕,作業(yè)匯報(bào) 1.歷史 試卷 2.歷史 提綱 3.地理 作業(yè)本 4.生物 作業(yè)本 寫到3.2 5.生物 ...
    霖葻閱讀 156評(píng)論 0 0