这有多糟糕?在30秒内

问题描述:

分配在编码基于物理的游戏3GB的总字节数,我已经创造了一切,从子类NSObjects。力矢量被存储在NSArrays每个粒子对象,那么加速度,速度和位置在与CADisplayLink 60fps的计算。这有多糟糕?在30秒内

的一个版本是不是意味着要进行优化,但它似乎运行得很好。 CADisplayLink快速且一致。但是,当我查看分配统计数据时......我从来没有见过这样的事情。 ARC做了伟大的工作,在保持在1兆字节实时字节,但是这件事情经过6场演出的整体分配的碎纸分钟。

所以我的问题是:

这是危险的代码,为长时间在设备上运行?这有多“坏”?如果我继续像这样开发,苹果是否会接受这个或者我会炒iPad?

enter image description here

+0

这可能会耗尽任何设备的电池它试图使用的应用程序非常迅速,如果任何可能会引起与苹果的关注。 –

+0

分配工具不是很好。看看VM跟踪器之一。 – Macmade

+1

分配工具太棒了。 VM跟踪器只有在映射/取消映射大量数据时才有用。由于大多数地图/非地图事件将与分配相关联,因此无论如何,最好关注分配率。 – bbum

优化以最小化分配的吞吐量是采用一个非常有效的方法。

值得注意的是,每次分配很可能将需要在大部分配置中的字节被触动,可能一些写入和读出许多,每每一个字节的分配。所有这些读/写都需要系统总线上的CPU周期和事务。

所以,是的,它会吃电池,并会增加系统温度。尽管如此,烧毁设备不太可能。 :)

排序由“#Transitory”,并开始思考如何消除暂时性的拨款。我通常最初忽略了各种MalloC## Bytes分配,因为这些分配通常是在某些类的实例中支持的商店。消除暂时的实例和malloc的数量也会下降。

对于任何给定的分配类型,您可以通过点击看到该类型的所有拨款创建的列表。按功能名称排序,然后感受最常用的功能。针对您的优化。

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

+2

非常感谢您提供非常明确和有用的答案。我查看了#Transportory,然后在所有malloc的下方,爬到列表顶部,是我的Vector Object类。我每秒钟从字面上分配数百个矢量,然后把它们扔掉。尽管如此,结果并不是一个致命的设计缺陷。尽快修复! – jperl

+0

是的,我只消除了一些不必要的分配,但它已经将内存使用量减少了60%。它运行在3GS上!超酷。 :) – jperl

+0

很高兴有帮助! – bbum