这有多糟糕?在30秒内分配3GB总字节数

jpe*_*erl 3 memory allocation objective-c ios

在编写基于物理的游戏时,我创建了从子类NSObjects创建的所有内容.对于每个粒子对象,力矢量存储在NSArrays中,然后使用CADisplayLink以60fps计算加速度,速度和位置.

版本1并不是要进行优化,但它似乎运行得很好.CADisplayLink快速且一致.但是,当我查看分配统计数据时......好吧,我从来没有见过类似的东西.ARC在将Live Bytes保持在1兆字节以下方面表现非常出色,但这一事情正在通过每分钟6分钟的整体分配进行粉碎.

所以我的问题是:

这段代码很长时间在设备上运行会很危险吗?这有多"糟糕"?如果我继续这样开发,苹果会接受这个还是我要炒iPad?

在此输入图像描述

bbu*_*bum 15

优化以最小化分配吞吐量是一种非常有效的方法.

值得注意的是,每次分配都可能需要触发分配中的大多数字节,可能需要在分配中的每个字节进行一些写入和多次读取.所有这些读/写都需要CPU周期和系统总线上的事务.

所以,是的,它会吃电池并会提高系统温度.但是,不太可能烧毁设备.:)

按"#Transitory"排序,并开始计算如何消除暂时性分配.我通常最初忽略各种Malloc ## Bytes分配,因为这些分配通常是在某些类的实例中支持存储.消除瞬态实例和mallocs的下降.

对于任何给定的分配类型,您可以单击以查看创建该类型的所有分配的列表.按功能名称排序,然后感受最常见的功能.在那里定位您的优化.

使用这种方法,我已经能够大规模优化一些大型应用程序; 通过简单地最小化分配率,有时可以将执行某些操作的时间减少75%以上!

  • 感谢您提供非常明确和有用的答案.我看了#Transitory,然后在所有的mallocs下面,爬到列表的顶部,是我的Vector Object类.我实际上每秒分配数百个向量,然后将它们扔掉.但事实证明,这并不是一个致命的设计缺陷.尽快修复! (2认同)