Ios 无法解释的帧速率仅在iPhone 5上下降

Ios 无法解释的帧速率仅在iPhone 5上下降,ios,iphone-5,frame-rate,Ios,Iphone 5,Frame Rate,我有一个iOS应用程序,它可以从设备摄像头获取帧,并进行一些CPU密集型的图像处理。在iPad2、iPad3和iPhone4S上,该应用程序以每秒30帧的速度运行。我最近在iPhone5上测试了它,大部分时间它都以每秒30帧的速度运行。偶尔我会注意到它会下降到每秒15帧左右,这是我在其他设备(据说硬件速度较慢的设备)上从未体验过的。我一直在努力追踪这个问题,我学到了很多东西,但没有找到一个解释。以下是我的一些观察结果,可能会为正在发生的事情提供线索: 这只发生在iPhone5上 当我试图在手机

我有一个iOS应用程序,它可以从设备摄像头获取帧,并进行一些CPU密集型的图像处理。在iPad2、iPad3和iPhone4S上,该应用程序以每秒30帧的速度运行。我最近在iPhone5上测试了它,大部分时间它都以每秒30帧的速度运行。偶尔我会注意到它会下降到每秒15帧左右,这是我在其他设备(据说硬件速度较慢的设备)上从未体验过的。我一直在努力追踪这个问题,我学到了很多东西,但没有找到一个解释。以下是我的一些观察结果,可能会为正在发生的事情提供线索:

  • 这只发生在iPhone5上
  • 当我试图在手机上分析应用程序时,我无法重现该问题
  • 应用程序在多个线程上运行,抓取帧并将图像转换为我所需的格式在单独的线程上运行,以进行密集的图像处理。帧抓取线程从不低于30fps,它是唯一下降的图像处理线程。这意味着我的问题不是由于某些原因(如低光照水平)导致的相机帧速率下降
  • 我倾向于通过启动应用程序、点击iPhone待机按钮、点击主页按钮并返回应用程序来重现问题。如果我重复这3-6次,问题经常发生(但并非总是)
  • 似乎与iOS 6.0没有关系,它可以在带有iOS 6的4s上正常工作
  • 当问题发生时,即使关闭应用程序并重新启动它,通常也无法恢复帧速率(这表明这是我的应用程序之外与iPhone 5相关的问题)
  • 将手机连接到我的电脑并重建应用程序似乎总能解决帧速率问题
这很奇怪。是不是iPhone5有时会降低手机的时钟速度以延长电池寿命(iPad和iPhone4S没有这样做)

我很想听听有类似经历的人的意见

我的应用程序在iPhone5上看起来应该不会更糟,应该会更好

多谢各位

凯文

更新

我做了更多的测试,但仍然没有发现问题。这就是我试过的

  • 我已经把线去掉了
  • 我已经删除了我使用的一些第三方
  • 删除所有日志记录
  • 尝试在仪器中重新创建,但失败。仪器中不会出现此问题

我已经没有主意了。喜欢听任何一个在iPhone5上经历过帧速率下降的人讲话吗?iPhone 5有省电模式吗?

最有可能的原因是代码中存在竞态条件,只有在iPhone 5上的特定计时时才会出错。我会四处寻找任何存在资源争用的地方,并确保正确处理它们,尤其是在执行超时的地方(因为您没有完全死锁或崩溃)

您提到您正在多个线程上运行。您的意思是说您正在使用
NSThread
性能选择背景:
NSOperation
,还是GCD?直接使用
NSThread
是线程和资源问题的常见原因,因为使用它比使用
NSOperation
或GCD更难正确执行操作

如果您曾经调用
performSelectorInBackground:
,我会高度怀疑这段代码,因为此调用极易被错误使用(而且应该永远不会被使用)。离开应用程序并重新启动它往往会导致问题,这一事实尤其会让我怀疑您正在视图控制器中手动生成线程(这是一个常见的错误)。
performSelectorInBackground:
的问题在于,没有简单的方法可以知道您已经为此生成了一个线程。所以你可以得到比你想的更多的线索

与所有性能方面一样,您应该从仪器开始。请特别关注时间分析器和线程工具


这类问题的另一个常见原因是:审核您对
NSLog
的使用。它是非常缓慢和同步的。在多线程上运行它会显著影响性能。

感谢Rob的回复。我花了一些时间研究多线程,我同意它可能是问题的原因,尽管我还不能确认这一点。我没有调用PrimeStudioBeLoad,我使用的线程是C++代码,它使用Boost线程。我已经试着消除大部分线程,但我仍然看到iPhone5的速度变慢了。至于NSLog,我们很少使用它。我无法在仪器中重现这个问题。这就是我怀疑手机节电的原因。但是如果iphone5的问题是省电,我想我会找到更多关于这个话题的帖子,我找不到。