A. WaitForTargetFPS: 
      Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间 
   B. Overhead: 
      Profiler总体时间-所有单项的记录时间总和。用于记录尚不明确的时间消耗,以帮助进一步完善Profiler的统计。 
        C. Physics.Simulate: 
      当前帧物理模拟的CPU占用时间。 
   D. Camera.Render: 
      相机渲染准备工作的CPU占用量 
   E. RenderTexture.SetActive: 
      设置RenderTexture操作. 
      底层实现:1.比对当前帧与前一帧的ColorSurface和DepthSurface. 
               2.如果这两个Buffer一致则不生成新的RT,否则则生成新的RT,并设置与之相对应的Viewport和空间转换矩阵. 
   F. Monobehaviour.OnMouse_ : 
      用于检测鼠标的输入消息接收和反馈,主要包括:SendMouseEvents和DoSendMouseEvents。(只要Edtor开起来,这个就会存在) 
   G. HandleUtility.SetViewInfo: 
      仅用于Editor中,作用是将GUI和Editor中的显示看起来与发布版本的显示一致。 
H. GUI.Repaint: 
      GUI的重绘(说明在有使用原生的OnGUI) 
   I. Event.Internal_MakeMasterEventCurrent: 
      负责GUI的消息传送 
   J. Cleanup Unused Cached Data: 
      清空无用的缓存数据,主要包括RenderBuffer的垃圾回收和TextRendering的垃圾回收。 
         1.RenderTexture.GarbageCollectTemporary:存在于RenderBuffer的垃圾回收中,清除临时的FreeTexture. 
         2.TextRendering.Cleanup:TextMesh的垃圾回收操作 
   K. Application.Integrate Assets in Background: 
      遍历预加载的线程队列并完成加载,同时,完成纹理的加载、Substance的Update等. 
   L. Application.LoadLevelAsync Integrate: 
      加载场景的CPU占用,通常如果此项时间长的话70%的可能是Texture过长导致. 
   M. UnloadScene: 
      卸载场景中的GameObjects、Component和GameManager,一般用在切换场景时. 
   N. CollectGameObjectObjects: 
      执行上面M项的同时,会将场景中的GameObject和Component聚集到一个Array中.然后执行下面的Destroy. 
   O. Destroy: 
      删除GameObject和Component的CPU占用. 
   P. AssetBundle.LoadAsync Integrate: 
      多线程加载AwakeQueue中的内容,即多线程执行资源的AwakeFromLoad函数. 
   Q. Loading.AwakeFromLoad: 
      在资源被加载后调用,对每种资源进行与其对应用处理.

2. CPU Usage 
   A. Device.Present: 
      device.PresentFrame的耗时显示,该选项出现在发布版本中. 
   B. Graphics.PresentAndSync: 
      GPU上的显示和垂直同步耗时.该选项出现在发布版本中. 
   C. Mesh.DrawVBO: 
      GPU中关于Mesh的Vertex Buffer Object的渲染耗时. 
   D. Shader.Parse: 
      资源加入后引擎对Shader的解析过程. 
   E. Shader.CreateGPUProgram: 
      根据当前设备支持的图形库来建立GPU工程. 
3. Memory Profiler 
 
   A. Used Total: 
      当前帧的Unity内存、Mono内存、GfxDriver内存、Profiler内存的总和. 
   B. Reserved Total: 
      系统在当前帧的申请内存. 
   C. Total System Memory Usage: 
      当前帧的虚拟内存使用量.(通常是我们当前使用内存的1.5~3倍) 
   D. GameObjects in Scene: 
      当前帧场景中的GameObject数量. 
   E. Total Objects in Scene: 
      当前帧场景中的Object数量(除GameObject外,还有Component等). 
   F. Total Object Count: 
      Object数据 + Asset数量. 
 
4. Detail Memory Profiler 
   A. Assets: 
      Texture2d:记录当前帧内存中所使用的纹理资源情况,包括各种GameObject的纹理、天空盒纹理以及场景中所用的Lightmap资源. 
   B. Scene Memory: 
      记录当前场景中各个方面的内存占用情况,包括GameObject、所用资源、各种组件以及GameManager等(天般情况通过AssetBundle加载的不会显示在这里). 
   A. Other: 
      ManagedHeap.UseSize:代码在运行时造成的堆内存分配,表示上次GC到目前为止所分配的堆内存量. 
      SerializedFile(3): 
      WebStream:这个是由WWW来进行加载的内存占用. 
      System.ExecutableAndDlls:不同平台和不同硬件得到的值会不一样。 
  
 
5. 优化重点 
   A. CPU-GC Allow: 
      关注原则:1.检测任何一次性内存分配大于2KB的选项 2.检测每帧都具有20B以上内存分配的选项. 
   B. Time ms: 
      记录游戏运行时每帧CPU占用(特别注意占用5ms以上的). 
   C. Memory Profiler-Other: 
      1.ManagedHeap.UsedSize: 移动游戏建议不要超过20MB. 
      2.SerializedFile: 通过异步加载(LoadFromCache、WWW等)的时候留下的序列化文件,可监视是否被卸载. 
      3.WebStream: 通过异步WWW下载的资源文件在内存中的解压版本,比SerializedFile大几倍或几十倍,重点监视.**** 
   D. Memory Profiler-Assets: 
      1.Texture2D: 重点检查是否有重复资源和超大Memory是否需要压缩等. 
      2.AnimationClip: 重点检查是否有重复资源. 
      3.Mesh: 重点检查是否有重复资源.

6. 项目中可能遇到的问题 
 
   A. Device.Present: 
      1.GPU的presentdevice确实非常耗时,一般出现在使用了非常复杂的shader. 
      2.GPU运行的非常快,而由于Vsync的原因,使得它需要等待较长的时间. 
      3.同样是Vsync的原因,但其他线程非常耗时,所以导致该等待时间很长,比如:过量AssetBundle加载时容易出现该问题. 
      4.Shader.CreateGPUProgram:Shader在runtime阶段(非预加载)会出现卡顿(华为K3V2芯片). 
   B. StackTraceUtility.PostprocessStacktrace()和StackTraceUtility.ExtractStackTrace(): 
      1.一般是由Debug.Log或类似API造成. 
      2.游戏发布后需将Debug API进行屏蔽. 
 
   C. Overhead: 
      1.一般情况为Vsync所致. 
      2.通常出现在Android设备上. 
   D. GC.Collect: 
      原因: 1.代码分配内存过量(恶性的) 2.一定时间间隔由系统调用(良性的). 
      占用时间:1.与现有Garbage size相关 2.与剩余内存使用颗粒相关(比如场景物件过多,利用率低的情况下,GC释放后需要做内存重排) 
   E. GarbageCollectAssetsProfile: 
      1.引擎在执行UnloadUnusedAssets操作(该操作是比较耗时的,建议在切场景的时候进行). 
      2.尽可能地避免使用Unity内建GUI,避免GUI.Repaint过渡GC Allow. 
      3.if(other.tag == GearParent.MogoPlayerTag)改为other.CompareTag(GearParent.MogoPlayerTag).因为other.tag为产生180B的GC Allow. 
   F. 少用foreach,因为每次foreach为产生一个enumerator(约16B的内存分配),尽量改为for. 
   G. Lambda表达式,使用不当会产生内存泄漏. 
   H. 尽量少用LINQ: 
      1.部分功能无法在某些平台使用. 
      2.会分配大量GC Allow. 
   I. 控制StartCoroutine的次数: 
      1.开启一个Coroutine(协程),至少分配37B的内存. 
      2.Coroutine类的实例 -- 21B. 
      3.Enumerator -- 16B. 
   J. 使用StringBuilder替代字符串直接连接. 
   K. 缓存组件: 
      1.每次GetComponent均会分配一定的GC Allow. 
      2.每次Object.name都会分配39B的堆内存.

基于Unity的Profiler性能分析的更多相关文章

  1. 记一次基于Unity的Profiler性能分析

    A. WaitForTargetFPS: Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间    B. Overhead:       Profiler总体时间-所有单项的记录时间总和.用于 ...

  2. Unity的Profiler性能分析

    1. CPU Usage A. WaitForTargetFPS: Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间 B. Overhead: Profiler总体时间-所有单项的记录时间总 ...

  3. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

  4. CLR Profiler 性能分析工具

    CLR Profiler 性能分析工具 CLR Profiler 性能分析工具 CLR Profiler 有两个版本,分别用于CLR1.1 和 CLR2.0,至于CLR4试了一些也可以,但不知道是否完 ...

  5. CLR Profiler 性能分析工具 (转)

    原文地址:http://www.cnblogs.com/kevinlzf/archive/2010/11/12/1876066.html 下载地址:http://www.microsoft.com/e ...

  6. Unity Profiler 性能分析

    Profiler窗口 1. CPU A. WaitForTargetFPS:       Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间    B. Overhead:       Pro ...

  7. unity直连android真机在Profiler性能分析测试

    基础步骤: 1.Unity打开你要测试的项目:File–Build Settings 2.如下图,按图顺序进行1.2.3.4.5操作,如果做过了,2就是灰色的,不能被点击,4和5需要相对应. 3.确保 ...

  8. 基于Linux服务器的性能分析与优化

    作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但硬件问题.软件问题.网络环境等的复杂性和多变性,导致了对系统的优化变得异常复杂,如何定位性能问题出在哪个方面 ...

  9. 从壹开始前后端分离 40 || 完美基于AOP的接口性能分析

    旁白音:本文是不定时更新的.net core,当前主线任务的Nuxt+VueAdmin教程的 nuxt.js 之 tibug项目已上线,大家可以玩一玩:http://123.206.33.109:70 ...

随机推荐

  1. 给Angularjs配上Requirejs

    给Angularjs配上Requirejs 需要考虑的事情: 1.js.css.template都按需加载,js主要就controller: * js和css都可以用requirejs和它的插件解决, ...

  2. NUint使用详解及Visual Studio配置

    NUint使用详解及Visual Studio配置 阅读目录 什么是单元测试? 为什么使用单元测试? NUint使用详解: 示例 属性 断言 简单测试 VS配置: External Tools Vis ...

  3. iOS 制作 framework 教程

    直接看步骤 废话不多说,哈哈! 1.新建一个静态库工程: 2:取自己喜欢的名字: 3.删除向导所生成工程中的 Target: 3.删除TestFrameWork对应的工程文件夹: 5:删除bulid ...

  4. 10-18 noip提高组模拟赛(codecomb)T2贪心

    T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...

  5. 解决Timer回调方法重复调用的问题

    如果Timer的回调方法的执行时间很长,计时器可能在上个回调方法还没有完成的时候再次触发,如果我们只是想让一个回调方法执行完后再执行下一个回调方法,可以这样: private static Timer ...

  6. C++内存中的封装、继承、多态(上)

    C++内存中的封装.继承.多态(上) 继我的上一篇文章:浅谈学习C++时用到的[封装继承多态]三个概念 此篇我们从C++对象内存布局和构造过程来具体分析C++中的封装.继承.多态. 一.封装模型的内存 ...

  7. CKeditor 集成 CKFinder

    之前照着网上的做,遇到了一些问题,经过多次实验修改最后算是成功了,下面进行详细讲解. 一.CKeditor的配置(附件中已有最新版CKeditor和CKFinder) 1.需要下载ckeditor, ...

  8. 支持异步同步的分布式CommandBus MSMQ实现

    支持异步同步的分布式CommandBus MSMQ实现 先上一张本文所描述的适用场景图 分布式场景,共3台server: 前端Server Order App Server Warehouse App ...

  9. jQuery EasyUI 1.3.4 离线API、Demo

    [原]jQuery EasyUI 1.3.4 离线API.Demo (最新)   说明 本文下载包为 jQuery EasyUI 1.3.4 离线API.Demo. API 按照分类整理做成了离线版本 ...

  10. css换行和超出隐藏

    一.强制换行1 word-break: break-all; 只对英文起作用,以字母作为换行依据.2 word-wrap: break-word; 只对英文起作用,以单词作为换行依据.3 white- ...