-
- 参数说明
-
- A WaitForTargetFPS
- B Overhead
- C PhysicsSimulate
- D CameraRender
- E RenderTextureSetActive
- F MonobehaviourOnMouse_
- G HandleUtilitySetViewInfo
- H GUIRepaint
- I EventInternal_MakeMasterEventCurrent
- J Cleanup Unused Cached Data
- K ApplicationIntegrate Assets in Background
- L ApplicationLoadLevelAsync Integrate
- M UnloadScene
- N CollectGameObjectObjects
- O Destroy
- P AssetBundleLoadAsync Integrate
- Q LoadingAwakeFromLoad
-
- CPU Usage
- Memory Profiler
- Detail Memory Profiler
- 优化重点
- 项目中可能遇到的问题
-
- A DevicePresent
- B StackTraceUtilityPostprocessStacktrace 与 StackTraceUtilityExtractStackTrace
- C Overhead
- D GCCollect
- E GarbageCollectAssetsProfile
- F 少用foreach因为每次foreach为产生一个enumerator约16B的内存分配尽量改为for 但如果是泛型字典集合的话直接采用foreach遍历链表直接用for
- G Lambda表达式使用不当会产生内存泄漏
- H 尽量少用LINQ
- I 控制StartCoroutine的次数
- J 使用StringBuilder替代字符串直接连接
- K 缓存组件
-
- 参数说明
1.参数说明
A. WaitForTargetFPS:
Vsync(垂直同步)功能锁,即显示当前帧的CPU等待时间 。
该参数一般出现在 CPU开销过低,且通过设定了目标帧率的情况下(Application.targetFrameRate)。当上一帧低于目标帧率时,将会在本帧产生一个WaitForTargetFPS的空闲等待耗时,以维持目标帧率。该项在Unity引擎的主循环中其实是最早执行的,即引擎实际上是根据上一帧的CPU耗时,在当前帧中通过增补WaitForTargetFPS的方式来将运行FPS维持到目标值。比如,目标帧率为30帧/秒,上一帧耗时15ms,那么当前帧中WaitForTargetFPS将会是18(33-15)ms,但是这一帧中其他耗时为28ms,那么在Profiler中这一帧的总耗时就变成了46(18+28)ms。
B. Overhead:
Profiler总体时间-所有单项的记录时间总和。用于记录尚不明确的时间消耗,以帮助进一步完善Profiler的统计。
C. Physics.Simulate:
当前帧物理模拟的CPU占用时间。
D. Camera.Render:
相机渲染准备工作的CPU占用量
E. RenderTexture.SetActive:
设置RenderTexture操作.
底层实现:
- 比对当前帧与前一帧的ColorSurface和DepthSurface.
- 如果这两个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的垃圾回收。
- RenderTexture.GarbageCollectTemporary:存在于RenderBuffer的垃圾回收中,清除临时的FreeTexture.
- 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和Co