我正在iPhone 3G和iPhone 4上测试一个基于2dopengles的iPhone游戏。它在iPhone4上运行得很好。。。在3G上也很不错。游戏状态更新为60赫兹。。。渲染速度为60fps。以下从Objective-C到C的转换是否会提高性能?
// current Objective-C function
- (void) updateSomething {
// simple update like x_position += 2.0;
}
// plain c function
void updateSomething(){
// simple update like x_position += 2.0;
}
假设这些函数是以60赫兹的频率调用的。我好奇的原因是this博客文章。在进行类似的转换时,作者提到了大量的性能改进。
干杯!
编辑:在XCode中运行CPU采样器工具后,看起来大约65%的函数调用是mach_msg_trap。显然,objc_msgSend占用了少量资源。
最佳答案
答案是:这取决于,但可能不是。当您查看这些数字时,它会使方法调用看起来很昂贵(速度慢了两倍!),但是如果您在实际程序的上下文中查看它,真正的收获是函数调用和方法调用在大多数情况下本质上都是免费的。
做一个叫做每秒60次的东西,每次通话减少100纳秒,这是一个毫无意义的微优化,在一个处理器上,它的功能和最初的iPhone一样强大,每秒只需要几百万分之一秒的改进。在实际程序中,方法调用对函数的命中率将比方法的实际内容小。
要做的事情是分析你的应用程序,看看实际占用的时间最多的地方。利用这些信息来改进算法,这些算法花费的实际时间最多。这样你才能得到真正的进步。很可能,objc_msdSend
本身不会接近最大的罪犯。
关于objective-c - 从Objective-C到普通C iPhone游戏的性能改进,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3544853/