真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Unity中Profiler性能分析

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

嵩縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

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í)間長的話70%的可能是Texture過長導(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)行的非??欤捎赩sync的原因,使得它需要等待較長的時(shí)間. 
      3.同樣是Vsync的原因,但其他線程非常耗時(shí),所以導(dǎo)致該等待時(shí)間很長,比如:過量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)存.

 


分享文章:Unity中Profiler性能分析
鏈接分享:http://weahome.cn/article/ispdog.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部