如何优化mach_msg_trap

时间:2011-10-30 12:55:38

标签: ios optimization cocos2d-iphone box2d

我知道之前已经问过这个问题,但没有人就如何解决这个问题给出任何有用的答案。我有一个使用box2d物理引擎的cocos2d ios应用程序。我对它进行了性能测试,cpu花费了5.6%的时间在mach_msg_trap上。从我从其他问题中收集的内容来看,似乎mach_msg_trap只是由于应用程序处于空闲状态而导致的主要线程延迟时间。我的申请并不闲着。它的性能不稳定,在50 fps区域内徘徊。有没有办法配置它以获得额外的性能?或者这只是我编写的一些不良代码的结果,如果是这样,我该如何优化呢?


我正在ipod touch第二代的调试版本中测试性能。这可能是问题的一部分。我在sprite批次中对某些事物进行分组。但有些精灵有孩子不是ccsprites所以我不能将所有东西分组在一个批次中。我确实创建了一个子弹池,而不是不断地分配和释放它们。但这是我获得不稳定表现的地方。当枪开始射击时,帧速率下降10-15 fps。我试图跟踪使用乐器所花费的时间,但前两次使用的是glValidateState,其中包括ccsprite draw和ccnode visit。第二个开始时间waister是mach_msg_trap。有没有其他方法可以找出子弹代码中的内容会降低性能?顺便说一下,你的书真的有助于学习cocos2d:)

1 个答案:

答案 0 :(得分:6)

您是否已阅读this question的答案?

mach_msg_trap并没有浪费时间闲着。它是一个在应用程序进程继续正常执行之前等待某些结果的函数。当然,它也将在你的应用程序闲置时运行,但我怀疑你是这样的。相反,这些5%可能来自等待磁盘I / O,例如从闪存加载文件时。

如果你的表现“不稳定”,我不会浪费时间试图找出你无法修改或配置的系统级功能的故障。

其次,你没有提到你在哪里测量性能,即哪个设备。如果你在iPhone 3G或更高版本上获得50 fps,性能甚至可以被认为是好的。此外,您应该仅在发布版本中测量性能。

就我个人而言,我只能建议您检查一下您是否遵循了最佳实践,例如为精灵使用精灵表和纹理图集,汇集精灵和物理对象,而不是经常创建和释放它们,以及减少迭代次数Box2D正在其阶梯函数中运行。