【问题标题】:iOS CPU Profile: Why might this thread be sucking up 99.9% CPU?iOS CPU Profile:为什么这个线程会占用 99.9% 的 CPU?
【发布时间】:2014-09-16 09:21:35
【问题描述】:

有时,当我加载表格视图时,除了让表格视图显示之外,我没有故意执行任何活动,我会等待几秒钟,然后我的 CPU 使用率就会飙升。如何找到原因?

【问题讨论】:

  • 我猜它处于“无限”循环中。在这种情况下,可能是因为存储被弄乱了,但也可能是因为您以某种方式描述了一个现在正在导航的循环数据结构。
  • 我认为我们需要更多细节(iOS 版本等等)。正如@HotLicks 所说,这可能是无限循环。
  • 反转调用树并尝试找出有问题的方法/函数。听起来像是 UIKit/绘图问题。

标签: ios multithreading xcode-instruments


【解决方案1】:

你可能没有结束你的UIGraphicsBeginImageContext

我通过在使用后添加UIGraphicsEndImageContext 解决了同样的问题。

【讨论】:

  • (Rudi,你出现在低质量的帖子队列中,因为你的回答看起来像“我有同样的问题”;所以我稍微改变了措辞 - 希望你没问题)
【解决方案2】:

为什么这个线程会占用 99.9% 的 CPU?

我不知道。但这里有一些想法:

  1. 负责的图书馆是UIKit。因此,似乎某些用户界面代码已损坏。
  2. 名为FreeContextStack 的函数运行了很长时间。
  3. pthread_oncepthread_getspecific 需要相当长的时间。这些函数速度很快,因此它们必须非常经常运行。
  4. 它们是GetContextStackPopContext 的一部分

似乎在您的代码中有某种“上下文”堆栈被推送——但没有被弹出。我会寻找 UIGraphicsPushContextUIGraphicsBeginImageContext 的出现,而没有它们的关闭对应项。

但我可能完全关闭,这些函数不是图形上下文代码的一部分。

【讨论】:

  • 例如,上下文 A 可能是上下文 B 的子级,而上下文 B 是上下文 A 的子级......
  • 没错!我错过了UIGraphicsEndImageContext()CGImageRelease(imageRef)
  • 我看到了同样的事情。有同样的问题。谢谢你的互联网聪明人!
  • 我有这个问题,但在我的项目中,我们没有结束图像上下文。有人有其他可能的解决方案吗?它也是随机的。它是不可重现的,偶尔会发生在各种随机视图中......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多