Unity开源了一个新的Memory Profiler,目前还没有集成到发布版的Unity中。不过这个新的Memory Profiler确实比现有的Profiler更加好用,所以值得一试。
下载地址
https://bitbucket.org/Unity-Technologies/memoryprofiler
把这个git仓库clone到本地。工具在这个仓库中的Unity工程里。
使用方式
- 游戏必须使用IL2CPP作为脚本后端进行编译。目前iOS默认使用的是IL2CPP,而android不是,所以在测试的时候,我用了iOS版本
- 游戏以Development Build方式打包。同时我还勾选了Autoconnect Profiler,不确定如果不勾选这个选项是否可以,没有测试过
- 在真机上安装启动游戏。我使用的测试机器是iPad
- 打开Memory Profiler代码仓库中的Unity工程
- 先打开Unity自带的Profiler,在Active Target中选中测试机。新的Memory Profiler还是需要使用老Profiler的Target选项才能连接到目标机器。
-
打开新的Memory Profiler。入口在Window菜单里,见下面截图。
- 点击Memory Profiler面板顶部的Take Snapshot菜单即可。之后需要耐心等待结果出来。
数据分析
Memory Profiler分析之后的结果见下面截图。
内存占用的结果已经以非常直观的块状图的方式显示出来了。图中的每一个大的色块是一种内存类型,例如左上角的是Mesh,Mesh下面的是Particle System,而最下面的是Texture2D。可以直观的看到,游戏里占用资源最多的是Texture2D。
点击Texture2D之后,还可以看到其中包括的所有贴图名字及其引用,通过显示的引用数据,可以非常方便的查看到底是哪里用到了这个资源,便于之后的优化。
可见通过分析这个内存快照,能够回答下面这些问题:
1. 占用内存的分别是哪些类型的数据?
2. 哪种类型的数据占用了最多的内存?
3. 每个类型的内存占用中具体包括哪些项?
4. 每一个内存占用的细项分别出现在代码中的哪里?
这里就体现出这个工具的强大之处了,因为只要能回答上面这些问题,多数内存问题也就不是问题了。
不足之处
虽然这个工具很好用,但是目前还没有集成到Unity的发布版本之中,可见还不是特别成熟。我遇到的最大的问题是抓取内存数据的速度实在是很慢,大概需要30秒钟的时间。第一次测试的时候,都以为Unity已经奔溃了。后来才发现,其实没有崩溃,只是特别慢,需要有耐心。
(全文完)