Unity中Profiler性能分析-創(chuàng)新互聯(lián)

在項目中一般性能優(yōu)化分為三種,資源優(yōu)化、渲染優(yōu)化、以及模型優(yōu)化,在資源優(yōu)化中,我們要保證我們的資源沒有重復(fù)或多余,這就要在平時項目中仔細導(dǎo)入其他人所給的資源。渲染優(yōu)化指的是在使用一些貼圖的時候可以采用LOD等技術(shù)使模型面數(shù)減少以增加FPS幀率。并使用遮罩剔除等技術(shù)。模型優(yōu)化就是盡量減少面數(shù)和頂點數(shù),讓我們的CPU和GPU不再超負荷的工作。下面呢,我將帶著大家一起來看一下我們Profiler面板中的一些重要的參數(shù)

創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計公司的優(yōu)秀設(shè)計人員和策劃人員組成的一個具有豐富經(jīng)驗的團隊,其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計師、平面廣告設(shè)計師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)頁設(shè)計制作、網(wǎng)站建設(shè)與維護、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。

Unity中Profiler性能分析

A. WaitForTargetFps:
    Vsync(垂直同步)功能所,即顯示當前幀的CPU等待時間
  B. Overhead:
    Profiler總體時間-所有單項的記錄時間總和。用于記錄尚不明確的時間消耗,以幫助進一步完善Profiler的統(tǒng)計。
      C. Physics.Simulate:
    當前幀物理模擬的CPU占用時間。
  D. Camera.Render:
    相機渲染準備工作的CPU占用量
  E. RenderTexture.SetActive:
    設(shè)置RenderTexture操作.
    底層實現(xiàn):1.比對當前幀與前一幀的ColorSurface和DepthSurface.
          2.如果這兩個Buffer一致則不生成新的RT,否則則生成新的RT,并設(shè)置與之相對應(yīng)的Viewport和空間轉(zhuǎn)換矩陣.
  F. Monobehaviour.OnMouse_ :
    用于檢測鼠標的輸入消息接收和反饋,主要包括:SendMouseEvents和DoSendMouseEvents。(只要Edtor開起來,這個就會存在)
  G. HandleUtility.SetViewInfo:
    僅用于Editor中,作用是將GUI和Editor中的顯示看起來與發(fā)布版本的顯示一致。
H. GUI.Repaint:
    GUI的重繪(說明在有使用原生的OnGUI)
  I. Event.Internal_MakeMasterEventCurrent:
    負責GUI的消息傳送
  J. Cleanup Unused Cached Data:
    清空無用的緩存數(shù)據(jù),主要包括RenderBuffer的垃圾回收和TextRendering的垃圾回收。
      1.RenderTexture.GarbageCollectTemporary:存在于RenderBuffer的垃圾回收中,清除臨時的FreeTexture.
      2.TextRendering.Cleanup:TextMesh的垃圾回收操作
  K. Application.Integrate Assets in Background:
    遍歷預(yù)加載的線程隊列并完成加載,同時,完成紋理的加載、Substance的Update等.
  L. Application.LoadLevelAsync Integrate:
    加載場景的CPU占用,通常如果此項時間長的話70%的可能是Texture過長導(dǎo)致.
  M. UnloadScene:
    卸載場景中的GameObjects、Component和GameManager,一般用在切換場景時.
  N. CollectGameObjectObjects:
    執(zhí)行上面M項的同時,會將場景中的GameObject和Component聚集到一個Array中.然后執(zhí)行下面的Destroy.
  O. Destroy:
    刪除GameObject和Component的CPU占用.
  P. AssetBundle.LoadAsync Integrate:
    多線程加載AwakeQueue中的內(nèi)容,即多線程執(zhí)行資源的AwakeFromLoad函數(shù).
  Q. Loading.AwakeFromLoad:
    在資源被加載后調(diào)用,對每種資源進行與其對應(yīng)用處理.

2. CPU Usage
  A. Device.Present:
    device.PresentFrame的耗時顯示,該選項出現(xiàn)在發(fā)布版本中.
  B. Graphics.PresentAndSync:
    GPU上的顯示和垂直同步耗時.該選項出現(xiàn)在發(fā)布版本中.
  C. Mesh.DrawVBO:
    GPU中關(guān)于Mesh的Vertex Buffer Object的渲染耗時.
  D. Shader.Parse:
    資源加入后引擎對Shader的解析過程.
  E. Shader.CreateGPUProgram:
    根據(jù)當前設(shè)備支持的圖形庫來建立GPU工程.
3. Memory Profiler

  A. Used Total:
    當前幀的Unity內(nèi)存、Mono內(nèi)存、GfxDriver內(nèi)存、Profiler內(nèi)存的總和.
  B. Reserved Total:
    系統(tǒng)在當前幀的申請內(nèi)存.
  C. Total System Memory Usage:
    當前幀的虛擬內(nèi)存使用量.(通常是我們當前使用內(nèi)存的1.5~3倍)
  D. GameObjects in Scene:
    當前幀場景中的GameObject數(shù)量.
  E. Total Objects in Scene:
    當前幀場景中的Object數(shù)量(除GameObject外,還有Component等).
  F. Total Object Count:
    Object數(shù)據(jù)+ Asset數(shù)量.

4. Detail Memory Profiler
  A. Assets:
    Texture2d:記錄當前幀內(nèi)存中所使用的紋理資源情況,包括各種GameObject的紋理、天空盒紋理以及場景中所用的Lightmap資源.
  B. Scene Memory:
    記錄當前場景中各個方面的內(nèi)存占用情況,包括GameObject、所用資源、各種組件以及GameManager等(天般情況通過AssetBundle加載的不會顯示在這里).
  A. Other:
    ManagedHeap.UseSize:代碼在運行時造成的堆內(nèi)存分配,表示上次GC到目前為止所分配的堆內(nèi)存量.
    SerializedFile(3):
    WebStream:這個是由WWW來進行加載的內(nèi)存占用.
    System.ExecutableAndDlls:不同平臺和不同硬件得到的值會不一樣。

5. 優(yōu)化重點
  A. CPU-GC Allow:
    關(guān)注原則:1.檢測任何一次性內(nèi)存分配大于2KB的選項2.檢測每幀都具有20B以上內(nèi)存分配的選項.
  B. Time ms:
    記錄游戲運行時每幀CPU占用(特別注意占用5ms以上的).
  C. Memory Profiler-Other:
    1.ManagedHeap.UsedSize: 移動游戲建議不要超過20MB.
    2.SerializedFile: 通過異步加載(LoadFromCache、WWW等)的時候留下的序列化文件,可監(jiān)視是否被卸載.
    3.WebStream: 通過異步WWW下載的資源文件在內(nèi)存中的解壓版本,比SerializedFile大幾倍或幾十倍,重點監(jiān)視.****
  D. Memory Profiler-Assets:
    1.Texture2D: 重點檢查是否有重復(fù)資源和超大Memory是否需要壓縮等.
    2.AnimationClip: 重點檢查是否有重復(fù)資源.
    3.Mesh: 重點檢查是否有重復(fù)資源.

6. 項目中可能遇到的問題

  A. Device.Present:
    1.GPU的presentdevice確實非常耗時,一般出現(xiàn)在使用了非常復(fù)雜的shader.
    2.GPU運行的非???,而由于Vsync的原因,使得它需要等待較長的時間.
    3.同樣是Vsync的原因,但其他線程非常耗時,所以導(dǎo)致該等待時間很長,比如:過量AssetBundle加載時容易出現(xiàn)該問題.
    4.Shader.CreateGPUProgram:Shader在runtime階段(非預(yù)加載)會出現(xiàn)卡頓(華為K3V2芯片).
  B. StackTraceUtility.PostprocessStacktrace()和StackTraceUtility.ExtractStackTrace():
    1.一般是由Debug.Log或類似API造成.
    2.游戲發(fā)布后需將Debug API進行屏蔽.

  C. Overhead:
    1.一般情況為Vsync所致.
    2.通常出現(xiàn)在Android設(shè)備上.
  D. GC.Collect:
    原因: 1.代碼分配內(nèi)存過量(惡性的) 2.一定時間間隔由系統(tǒng)調(diào)用(良性的).
    占用時間:1.與現(xiàn)有Garbage size相關(guān)2.與剩余內(nèi)存使用顆粒相關(guān)(比如場景物件過多,利用率低的情況下,GC釋放后需要做內(nèi)存重排)
  E. GarbageCollectAssetsProfile:
    1.引擎在執(zhí)行UnloadUnusedAssets操作(該操作是比較耗時的,建議在切場景的時候進行).
    2.盡可能地避免使用Unity內(nèi)建GUI,避免GUI.Repaint過渡GC Allow.
    3.if(other.tag == GearParent.MogoPlayerTag)改為other.CompareTag(GearParent.MogoPlayerTag).因為other.tag為產(chǎn)生180B的GC Allow.
  F. 少用foreach,因為每次foreach為產(chǎn)生一個enumerator(約16B的內(nèi)存分配),盡量改為for.
  G. Lambda表達式,使用不當會產(chǎn)生內(nèi)存泄漏.
  H. 盡量少用LINQ:
    1.部分功能無法在某些平臺使用.
    2.會分配大量GC Allow.
  I. 控制StartCoroutine的次數(shù):
    1.開啟一個Coroutine(協(xié)程),至少分配37B的內(nèi)存.
    2.Coroutine類的實例-- 21B.
    3.Enumerator -- 16B.
  J. 使用StringBuilder替代字符串直接連接.
  K. 緩存組件:
    1.每次GetComponent均會分配一定的GC Allow.
    2.每次Object.name都會分配39B的堆內(nèi)存.

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁標題:Unity中Profiler性能分析-創(chuàng)新互聯(lián)
標題來源:http://muchs.cn/article36/dpodpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、用戶體驗外貿(mào)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)網(wǎng)站排名、手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管