iOS 内存、CPU占用情况探究 - Unity
探究目的:
Unity作为3D图像引擎植入iOS端中,其内存及CPU占用情况贯穿整个App开发是一个相对较大的问题,为了更快的加载速度和更及时的交互相应,进行了此次探究。
用到的工具 Instruments Leaks 在使用过程中遇到问题可参照 iOS用Instruments Leaks调试出现问题解决方案 进行解决
进行测试
测试环境
设备:iPhone 11
iOS:14.4.2
Unity:
Xcode:Version 12.4 (12D4e)
iOS Unity混合模式
测试时长:
首先来看看未加载Unity时App 的初始状态

加载Unity并作展示后的状态


测试步骤
- 进入Unity页面
- 退出Unity页面
- 反复进入Unity 页面
- 切换Tab后前往其他Unity页面并在Unity页面进行点击、打开窗口、执行动作等操作
- 退出并返回首页Tab进入Unity页面,之后退出Unity页面
现象分析:
- 因Unity在App初始时执行加载所以在App打开时内存已经提升至320左右,在打开Unity页面时会有小幅升高,但退出时内存便得以释放。
- 在Unity在加载后CPU占用是中保持在45%以上,在Unity场景中执行动作时CPU的使用率会有明显升高的情况,在App不展示Unity页面时,CPU使用率也没有出现下降的迹象。
优化方案
资料分享:https://mp.weixin.qq.com/s/GB7TJtfhTkmcP8so0IlOlQ
讨论:https://www.zhihu.com/question/26779558
- 控制Unity视图不展示时的CPU占用;
未完待续
名词解释:
All Heap & Anonymous VM
Heap 堆内存
Anonymous VM 虚拟内存
All Heap Allocations:进程运行过程中堆上分配的内存,简单理解就是实际分配的内存,包括所有的类实例,比如UIViewController、UIView、Foundation数据结构等。比如:
Malloc 512.00KiB: 分配的512k堆内存,类似还有 Malloc 80.00KiB等
CTRun: Core Text对象内存
All Anonymous:主要包含一些系统模块的内存占用以 VM: 开头
VM: IOSSurface:用于存储FBO、RBO等渲染数据的底层数据结构,是跨进程的,通常在CoreGraphics、OpenGLES、Metal之间传递纹理数据
VM: Stack: 栈内存(比如每个线程都会需要500KB)
VM: IOAccelerator:图片的CVPixelBuffer