unity3dunity memory leakprofiler工具在哪

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)改为pareTag(GearParent.MogoPlayerTag).因为other.tag为产生180B的GC
& &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的堆内存.
本文已收录于以下专栏:
相关文章推荐
在今年的CJ CGDC 中国游戏开发者大会上,来自Unity大中华区的技术支持经理张鑫带来了关于《全新的Unity移动游戏优化解决方案》的精彩主题演讲。本次演讲分享的内容,包括从渲染模块、物理模块、动...
在今年的CJ CGDC 中国游戏开发者大会上,来自Unity大中华区的技术支持经理张鑫带来了关于《全新的Unity移动游戏优化解决方案》的精彩主题演讲。本次演讲分享的内容,包括从渲染模块、物理模块、动...
长话短说,我整理了一下mac版Unity3D pro下的Profiler连接Android的使用。注意是专业版的Unity3D。在Window下会有Profiler
这个工具的意义是,游戏在...
A. WaitForTargetFPS: 
      Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间 
   B. Overhead: 
      Profiler总体...
1. CPU Usage
A. WaitForTargetFPS: Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间
B. Overhead: Profiler总体时间-所...
基于Unity的Profiler性能分析
A. WaitForTargetFPS: 
      Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间
B. Overhead: 
      Profiler总体时间-所有...
A. WaitForTargetFPS: 
      Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间 
   B. Overhead: 
      Profiler总体时间-...
A. WaitForTargetFPS: 
      Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间 
   B. Overhead: 
      Profiler总体...
文章转载自http://www./2791.html
本篇unity教程我们来学习下Unity的Profiler性能分析
A. WaitFo...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Unity3D(53)
【经验】使用Profiler工具分析内存占用情况
& & & &Unity3D为我们提供了一个强大的性能分析工具Profiler。今天我们就使用Profiler来详细分析一下官方例子AngryBots的内存使用信息数据。
&&&&&& 首先打开Profiler选择Memory选项,在游戏运行的某一帧查看Detailed选项数据(Simple模式的数据很直观,可以知道内存大体被哪部分占用了,网上也有很多相关介绍,我就不再啰嗦了),如下图所示:
选中后,unity会自动获取这一帧的内存占用数据项,主要分为:Other、Assets、BuiltinResources、Scene Memory、NotSaved这五大部分,下面我们就来一一分析。
记录数据项很多,篇幅时间有限,我们就专挑占用大小排行榜靠前的几项来详细分析吧。
System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用。不同平台和不同硬件得到的值会不一样,可以通过修改Player
Setting的Stripping Level来调节大小。
Ricky:我试着修改了一下Stripping Level似乎没什么改变,感觉虽占用内存大但不会影响游戏运行。我们暂时忽略它吧(- -)!
GfxClientDevice:GFX(图形加速\图形加速器\显卡
(GraphicsForce Express))客户端设备。
Ricky:虽占用较大内存,但这也是必备项,没办法优化。继续忽略吧(- -)!!
ManagedHeap.UsedSize:托管堆使用大小。
Ricky:重点监控对象,不要让它超过20MB,否则可能会有性能问题!
ShaderLab:Unity自带的着色器语言工具相关资源。
Ricky:这个东西大家都比较熟悉了,忽略它吧。
SerializedFile:序列化文件,把显示中的Prefab、Atlas和metadata等资源加载进内存。
Ricky:重点对象,这里就是你要监控的哪些预设在序列化中在内存中占用大小,根据需求进行优化。
PersistentManager.Remapper:持久化数据重映射管理相关
Ricky:与持久化数据相关,比如AssetBundle之类的。注意相关的文件。
ManagedHeap.ReservedUnusedSize:堆预留不使用内存大小,只由Mono使用。
Ricky:无法优化。
Texture2D:&2D贴图及纹理。
Ricky:重点优化对象,有以下几点可以优化:
许多贴图采用的Format格式是ARGB 32 bit所以保真度很高但占用的内存也很大。在不失真的前提下,适当压缩贴图,使用ARGB 16 bit就会减少一倍,如果继续Android采用RGBA Compressed ETC2 8 bits(iOS采用RGBA Compressed PVRTC 4 bits),又可以再减少一倍。把不需要透贴但有通道的贴图,全都转换格式Android:RGB
Compressed ETC 4 bits,iOS:RGB Compressed PVRTC 4 bits。当加载一个新的Prefab或贴图,不及时回收,它就会永驻在内存中,就算切换场景也不会销毁。应该确定物体不再使用或长时间不使用就先把物体制空(null),然后调用Resources.UnloadUnusedAssets(),才能真正释放内存。有大量空白的图集贴图,可以用TexturePacker等工具进行优化或考虑合并到其他图集中。
AudioManager:音频管理器
Ricky:随着音频文件的增多而增大。
AudioClip:音效及声音文件
Ricky:重点优化对象,播放时长较长的音乐文件需要进行压缩成.mp3或.ogg格式,时长较短的音效文件可以使用.wav
或.aiff格式。
Cubemap:立方图纹理
Ricky:这个一般在天空盒中比较常见,我也不知道如何优化这个。。。
Mesh:模型网格
Ricky:主要检查是否有重复的资源,还有尽量减少点面数。
Scene Memory
Mesh:场景中使用的网格
Ricky:注意网格的点面数,能合并的mesh尽量合并。
Builtin Resources
Ricky:这些都是Unity的一些内部资源,对于项目内存没有什么分析价值,所以我就暂时不对其进行分析了。
Profiler内存重点关注优化项目
1)ManagedHeap.UsedSize: 移动游戏建议不要超过20MB.
2)SerializedFile: 通过异步加载(LoadFromCache、WWW等)的时候留下的序列化文件,可监视是否被卸载.
3)WebStream: 通过异步WWW下载的资源文件在内存中的解压版本,比SerializedFile大几倍或几十倍,不过我们现在项目中展示没有。
4)Texture2D: 重点检查是否有重复资源和超大Memory是否需要压缩等.
5)AnimationClip: 重点检查是否有重复资源.
6)Mesh: 重点检查是否有重复资源.
项目中可能遇到的问题
1.Device.Present:
1)GPU的presentdevice确实非常耗时,一般出现在使用了非常复杂的shader.
2)GPU运行的非常快,而由于Vsync的原因,使得它需要等待较长的时间.
3)同样是Vsync的原因,但其他线程非常耗时,所以导致该等待时间很长,比如:过量AssetBundle加载时容易出现该问题.
4)Shader.CreateGPUProgram:Shader在runtime阶段(非预加载)会出现卡顿(华为K3V2芯片).
5)StackTraceUtility.PostprocessStacktrace()和StackTraceUtility.ExtractStackTrace(): 一般是由Debug.Log或类似API造成,游戏发布后需将Debug API进行屏蔽。
2.Overhead:
1)一般情况为Vsync所致.
2)通常出现在Android设备上.
3.GC.Collect:
1)代码分配内存过量(恶性的)
2)一定时间间隔由系统调用(良性的).
占用时间:
1)与现有Garbage size相关
2)与剩余内存使用颗粒相关(比如场景物件过多,利用率低的情况下,GC释放后需要做内存重排)
4.GarbageCollectAssetsProfile:
1)引擎在执行UnloadUnusedAssets操作(该操作是比较耗时的,建议在切场景的时候进行)。
2)尽可能地避免使用Unity内建GUI,避免GUI.Repaint过渡GCAllow.
3)if(other.tag == a.tag)改为pareTag(a.tag).因为other.tag为产生180B的GC Allow.
4)少用foreach,因为每次foreach为产生一个enumerator(约16B的内存分配),尽量改为for.
5)Lambda表达式,使用不当会产生内存泄漏.
5.尽量少用LINQ:
1)部分功能无法在某些平台使用.
2)会分配大量GC Allow.
6.控制StartCoroutine的次数:
1)开启一个Coroutine(协程),至少分配37B的内存.
2)Coroutine类的实例 -& 21B.
3)Enumerator -& 16B.
7.使用StringBuilder替代字符串直接连接.
8.缓存组件:
1)每次GetComponent均会分配一定的GC Allow.
2)每次Object.name都会分配39B的堆内存.
Yang个人原创,版权所有,转载注明,谢谢。http://blog.csdn.net/yangyy753
版权声明:本文为博主原创文章,未经博主允许不得转载。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
(4)(2)(1)(2)(3)(2)(2)(1)(2)(11)(29)(35)(10)(10)(1)(4)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'}

我要回帖

更多关于 unity3d开发工具 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信