0

我注意到我的整个应用程序在使用一段时间后变得非常无响应。我打开了仪器并决定做一些测试,主要是关于内存和 CPU 使用情况。我将我的应用程序与 Twitter 应用程序进行了比较,因为它UITableView在 tableView 中同时使用 a 和图像,就像我的应用程序一样。我对仪器完全陌生,所以必须使用我对 iPhone 工作原理的非常基本的了解来弄清楚所有内容。

看来我的内存使用情况很好,因为这两个应用程序惊人地相似。我的应用经过大量使用,在这个阶段非常滞后:真实内存:55.63,虚拟:152.03。推特:真实:58.42,虚拟:192.89。Twitter 应用程序,尽管使用了更多内存,但仍然非常响应(我不会说超级响应,仍然有一些跳跃的时刻)。关闭后,我转向 CPU。

现在这就是奇怪的地方。Twitter 应用程序使用非常少量的 CPU(尽管它比我的应用程序稍微密集一些)。当什么都没有发生时,CPU 使用率下降到 ~0%。它跳了几次,这恰逢该应用程序变得有点滞后的时候。然而,我的应用程序是一个巨大的 CPU 猪!当什么都没有发生时,我的应用程序使用了 100% 的已用 CPU,大约是 80%-100%。换句话说,当读取 Activity Monitor Instrument 上的条时,系统负载在UITableView空闲时并没有减少,这就是 Twitter 应用程序正在做的事情。

因此,我决定这就是该应用程序变得无响应/滞后的原因。问题是,我不知道如何解决这个问题。

这就是我能想到的:
- 我做了一大堆异步网络请求。然而,这并不能解释为什么 CPU 使用率保持不变,因为请求通常在一秒钟内完成,并且很快就会下载并解析 JSON。
- 在完成每个单独的网络请求后,我重新加载 TableView。但是,如上所述,这是在下载最后一个 JSON 的同时完成的,因此没有理由会导致 CPU 使用率飙升。
- 在我的单元格配置中完成了大量计算。但是,与前两个相同,它并没有太多解释。

即使我切换到UIViewController高负载仍然存在。是UIViewController启动视图控制器,当应用程序第一次启动时,它的负载为 0%,并且无限期地保持在 0%。负载只有在负载时才跳起来UITableViewController,然后它仍然如上所述。因此,这个巨大的 CPU 使用率必须来自UITableViewController.

有没有人有任何想法?对不起,大量的文字墙。如果您需要我发布任何代码,请询问,我会做的。

感谢您的帮助,
问候,
迈克

4

2 回答 2

2

在调试器中运行您的应用程序,并在它运行缓慢时随机停止它。然后检查所有不同的线程在做什么。你可能很快就会发现一些你意想不到的东西,并且可能是罪魁祸首。

只需点击调试器中的暂停按钮,然后展开所有线程以显示调用堆栈。如果一个线程的调用栈只显示iOS的函数和方法,你可以忽略它。但是如果它显示了你的应用程序的一些方法,那么你想点击这些方法并调查它:为什么该方法当前正在运行?为什么它卡在这条特定的线上?

这有点像穷人的性能调试方法。高级方法是使用 Instruments。

于 2013-01-02T14:54:48.387 回答
0

我做了一大堆异步网络请求。然而,这并不能解释为什么 CPU 使用率保持不变,因为请求通常在一秒钟内完成,并且很快就会下载并解析 JSON。

通常他们使用相反的方法:像 Twitter 这样做得好的应用程序使用一个服务器,当有更新时,它会向应用程序发送通知。

看看这篇文章

于 2013-01-02T14:32:34.207 回答