【问题标题】:Significant application performance difference between IOS simulator and IphoneIOS模拟器和Iphone之间显着的应用程序性能差异
【发布时间】:2013-06-01 14:10:52
【问题描述】:

问题简述

最近几周我一直在构建一个 IOS 应用程序,但遇到了一些麻烦。该应用程序通过每秒多次操作然后绘制图像光栅来播放动画。图像是通过将其分配给UIViewsCALayer 来绘制的,就像self.layer.contents = (id)pimage.CGImage; 一样,计算和渲染在两个CADisplayLinks 中分离。

这种动画技术在 iPhone 6.1 模拟器上实现了令人满意的性能,但是当它在物理设备(运行 IOS 6.1.3 的 Iphone 4s)上构建时,它会遇到明显的减速。减速是如此糟糕,以至于它实际上使应用程序无法使用。

疑似问题

我在这个问题Difference of memory organization between iOS device and iPhone simulator 中读到,允许模拟器使用比实际设备更多的内存。但是,在“仪器”中观察我的应用程序内存使用情况时,我注意到总内存使用量从未超过 3Mbs。所以我不确定这是否真的是问题,但可能值得指出。

根据这个问题,Does the iOS-Simulator use multiple cores?,IOS 模拟器运行的是英特尔芯片,而实际我的设备使用的是苹果 A5 芯片。我怀疑这也可能是放缓的原因。

我正在考虑在 Open GL 中重写动画,但是我想先尝试改进现有代码,然后再采取任何激烈的步骤。

在确定问题所在方面的任何帮助将不胜感激。

更新

感谢所有提供建议的人。 我在分析时发现主要瓶颈实际上是为下一个动画清除图像光栅。我决定用opengl重写动画的渲染。并没有预期的那么长。该应用程序现在实现了相当不错的性能水平,并且更简单一些。

【问题讨论】:

  • 您是否在 beth 设备和模拟器上的仪器中运行过它?我发现在模拟器上的计算比在设备上运行得快得多,但是 openGL 风格的东西在设备上运行得更快。使用计时工具查看哪些函数占用了所有处理时间并首先关注该函数(或在此处发布,以便我们了解它为何缓慢)。
  • 模拟器还充分利用了 Mac CPU 的潜力,而在真正的 iOS 设备上,您的 CPU 功能要弱得多。您已经正式发现了为什么必须在真实设备上测试应用程序。该模拟器适用于基本逻辑测试,但不适用于性能测试。

标签: ios performance memory-management ios-simulator


【解决方案1】:

这是一个经典问题。模拟器正在使用您的高性能工作站/笔记本电脑的资源。

不幸的是,唯一的解决方案是返回并优化您的代码,尤其是显示内容。

通常,您希望尽量减少计算时间的绘制时间,这听起来像是您正在做的,但请确保您不在主线程上进行计算。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
    // Do the computation
});

您可以在设备上运行时使用工具,因此 CoreGraphics 工具可以随时查看正在使用的内容并指向有问题的代码。不幸的是,您可能已经知道它是什么,它只是归结为优化。

【讨论】:

    【解决方案2】:

    速度变慢很可能与图像位图有关。我假设您正在使用在显示外观回调中更改的一系列静止图像。我相信,如果您可以使用添加到主视图/图层(同时删除旧视图/图层)并且已经包含 CGImageRefs 的 CALayers,那么您可以使用 CGContextDrawImage() 在图层的 drawInContext 方法中对图像进行 blit。将上下文设置为使用复制而不是混合,因此它只是替换旧位。

    您可以使用调度队列在辅助线程上创建包含图像的 CALayer 子类,然后当然会在主队列上进行绘制。您可以使用一些限制来维持 10 个左右的 CALayer 队列,并在它们被消耗时补充它们。

    如果这不起作用,那么 OpenGL 可能会有所帮助,但这些都无助于在处理器和 GPU 之间移动位(因为您使用的是图像堆栈,而不仅仅是动画一个)。

    【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2011-03-04
      • 1970-01-01
      • 2016-12-28
      • 2023-03-13
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 2012-09-22
      相关资源
      最近更新 更多