如何优化mach_msg_trap

我知道这个问题之前已经被问过了,但没有人给出如何解决的有用答案。 我有一个使用box2d物理引擎的cocos2d ios应用程序。 我对它进行了性能testing,cpu花费了mach_msg_trap的5.6%的时间。 从我从其他问题收集的信息来看,好像mach_msg_trap只是因为应用程序处于闲置状态而减less了主线程的时间。 我的应用程序不是闲置。 它有不稳定的performance,盘旋在50 fps的区域。 有什么办法来configuration这个来获得额外的性能? 或者这只是我写的一些不好的代码的结果,如果是的话,我该如何优化它?


我正在testing第二代iPod touch上的debugging版本的性能。 这可能是问题的一部分。 我正在精灵群组中分组某些东西。 但有些小精灵的孩子不是聪明人,所以我不能把所有的东西都分成一组。 我确实创造了一批子弹,而不是经常分配和释放它们。 但这是我得到不稳定的performance。 当枪开始发射时,帧率下降10-15 fps。 我试图追踪使用仪器这么久的情况,但是最重要的两个时间是waValidateState,其中包括ccsprite绘制和ccnode访问。 第二次请求的时候,waister是mach_msg_trap。 有没有其他的方法来找出子弹的代码中是什么,这会降低性能? 顺便说一下,你的书是真正有用的学习cocos2d 🙂

你读过这个问题的答案吗?

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

如果你的性能“不稳定”,我不会浪费时间去查找你不能修改或configuration的系统级function的故障。

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

就我个人而言,我只能推荐你检查一下你是否遵循了最佳实践,比如使用精灵图纸和纹理图集作为你的精灵,合并精灵和物理对象,而不是经常创build和释放它们,并减lessBox2D运行的迭代次数其阶梯function。