我有一个iOS应用程序,它可以从设备、摄像机抓取帧,并进行一些相当密集的图像处理。在iPad 2、iPad 3和iPhone 4s上,应用程序以每秒30帧的速度愉快地运行。我最近在iPhone 5上测试了它,大多数情况下它的运行速度是30 fps。偶尔我会注意到它下降到了大约15 fps,这在其他设备(据称硬件速度较慢的设备)上我从未体验过。我努力去追踪这个问题,我学到了很多东西,但没有找到解释。以下是我的一些观察结果,它们可能会给我们提供一些线索:
这很奇怪。难道iPhone 5有时会降低手机的时钟速度来延长电池续航时间( iPads和iPhone 4s却没有)吗?
我想听听任何有类似经历的人的意见。
我的应用程序不应该在iPhone 5上看起来更糟--它应该看起来更好!
事先非常感谢,
凯文
更新
我做了更多的测试,但仍然没有发现问题。这就是我试过的。
我的想法已经用完了。喜欢听谁谁有经验的帧率放缓的iPhone 5?iPhone 5有省电模式吗?
发布于 2012-12-13 15:36:03
最有可能的原因是代码中的争用条件只会被iPhone 5上的特定时间所绊倒。我会四处寻找有资源争用的地方,并确保正确地处理它们,尤其是执行超时的地方(因为您没有完全死锁或崩溃)。
你提到你在多个线程上运行。您的意思是您正在使用NSThread、performSelectorInBackground:、NSOperation或GCD吗?直接使用NSThread是线程和资源问题的常见原因,因为与使用NSOperation或GCD相比,使用它更难正确地完成任务。
如果您曾经调用过performSelectorInBackground:,我会非常怀疑这段代码,因为这个调用非常容易被错误地使用(而且几乎不应该被使用)。离开应用程序并重新启动它往往会导致问题,这尤其让我怀疑您正在视图控制器中手动生成线程(这是一个常见的错误)。performSelectorInBackground:的问题在于,没有一种简单的方法可以知道您已经为此生成了一个线程。这样你就可以得到比你想要的更多的线程。
和所有的表演一样,你应该从乐器开始。特别是在时间轮廓仪和线程工具。
这类问题的另一个常见原因是:审核NSLog的使用情况。它是非常缓慢和同步的。在多个线程上运行它会显著影响性能。
https://stackoverflow.com/questions/13862743
复制相似问题