1

使用“ Time Profiler ”和“ CPU Monitor ”对 iPhone 4 上的应用程序进行了分析,并试图理解它。

鉴于执行时间为 8 分钟,CPU“运行时间”约为 2 分钟。其中大约 67% 在主线程上,其中 52% 来自“自己的代码”。

现在,我可以看到大部分时间都花在枚举数组(和相关工作)、UIKit 操作等上。

问题是,我如何从这些数据中得出任何有意义的结论?即这里发生了一些需要修复的问题。

考虑到应用程序的性质,我可以看到在运行时间(中位数为 70%)内有很多 CPU 负载是不“合理的”。

话虽如此,有些事情确实很突出。在主线程上解析 HTTP 响应,急切地创建对象(也由内存分析支持)。

但是,我在这里寻找的是冒犯代码以及仅基于 CPU 运行时间的有用结论。即在这里花费“太多”时间。

在此处输入图像描述

更新

让我尝试并详细说明,以便提供更好的图片。

根据这个应用程序的功能要求,我不明白为什么它不能在 iPhone 3G 上运行。CPU 使用率中位数约为 70%,峰值为 97%,这在 iPhone 4 上看起来只是一个危险信号。

对此最明显的反应是调查代码并从中得出结论。

我希望的是以下形式的明确答案

  1. 如果您将 25% 到 50% 的时间花在 CA 上,那么您的动画就有问题
  2. 如果您在与 UIKit 相关的任何事情上花费 1000 毫秒,最好检查您的处理

再说一次,也许没有任何答案,只有在运行时间和 CPU 使用率方面出现问题的迹象。

4

3 回答 3

0

在开发演示中,Apple 指出,虽然 CPU 使用率在模拟器中并不是一个准确的指标,但在设备上进行分析时需要保留一些东西。就我个人而言,我认为任何需要大量 CPU 时间而没有充分理由的线程都是需要解决的问题。找出时间槽,按百分比排列优先级,然后开始处理它们。这些现在可能不是可见的问题,但如果还没有的话,它们将开始降低用户对应用程序的体验,并可能降低设备的体验。

查看他们关于如何有效使用 CPU 分析的文档以获得一些方便的提示。

如果数组枚举需要很多时间,那么我建议字典或其他更有效的缓存可能是合适的,假设您可以腾出一些内存来减轻 CPU 负担。

一种有效的方法可能是从主线程(给定)中删除所有业务逻辑,并在应用程序和解析/业务逻辑之间建立良好的边界层。从这里您可以更好地挂钩一些测试套件,这些套件可以更好地告诉您代码是否有问题,或者它是否只是应用程序 UI 本身的重要要求......

于 2013-11-12T20:45:41.193 回答
0

Answer for question "is there something wrong going on here that needs fixing" is simple: do you see the problem while using application? If yes (you see glitches in animation, or app hang for a while), you probably want to fix it. If not, you may be looking for premature optimization.
Nonetheless, parsing http responses in main thread, may be a bad idea.

于 2013-11-12T18:02:12.807 回答
0

八分钟?

不用拐弯抹角,你想让你的应用程序更快,对吧?

忘记查看 CPU 负载并想知道它是否正确。忘记猜测是否是 HTTP 解析。也许是这样,但猜测不会告诉你。忘记在代码计时中翻找东​​西,希望你能找到问题。

您可以直接找出它为什么要花费这么多时间。 这是我使用的方法,是一个(业余)视频。

如果您这样做,将会发生以下情况。首先你会发现一些你永远猜不到的东西,当你修复它时,你会在 8 分钟内减少一大块,比如可能会减少到 6 分钟。然后你再做一次,再砍掉一大块。你重复,直到你找不到任何可以修复的东西,然后它会比你的 8 分钟快得多

好的,现在球在你的球场上了。

于 2013-11-13T00:15:58.127 回答