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 的初始状态


image.png

加载Unity并作展示后的状态


image.png
Unity CPU使用情况

测试步骤

  1. 进入Unity页面
  2. 退出Unity页面
  3. 反复进入Unity 页面
  4. 切换Tab后前往其他Unity页面并在Unity页面进行点击、打开窗口、执行动作等操作
  5. 退出并返回首页Tab进入Unity页面,之后退出Unity页面

现象分析:

  1. 因Unity在App初始时执行加载所以在App打开时内存已经提升至320左右,在打开Unity页面时会有小幅升高,但退出时内存便得以释放。
  2. 在Unity在加载后CPU占用是中保持在45%以上,在Unity场景中执行动作时CPU的使用率会有明显升高的情况,在App不展示Unity页面时,CPU使用率也没有出现下降的迹象。

优化方案

资料分享:https://mp.weixin.qq.com/s/GB7TJtfhTkmcP8so0IlOlQ
讨论:https://www.zhihu.com/question/26779558

  1. 控制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


你可能感兴趣的:(iOS 内存、CPU占用情况探究 - Unity)