【问题标题】:CPU usage shooting up when I am running a for-in loop: OS-x app当我运行 for-in 循环时 CPU 使用率上升:OS-x 应用程序
【发布时间】:2012-08-03 10:35:00
【问题描述】:

当我的循环运行大约 15k 次时,正在使用过多的 CPU。它始终在 90 -100 % 的范围内。我在循环中所做的是一系列核心数据实体更新/创建。为什么会这样?我正在后台运行我的进程,并且我也将线程优先级指定为最小值!

【问题讨论】:

  • 如果没有其他进程需要大量 CPU 时间,那么后台进程占用 90 - 100% 是完全正常的。如果您想减少后台进程的干扰,请在 for 循环中调用 sleep()
  • 谢谢你!无论如何,它不会挂起 UI。所以就这样吧:)

标签: ios macos core-data cpu cpu-usage


【解决方案1】:

Paul R 是正确的 - 系统将在其拥有的资源的情况下尽快完成循环中的任务。在这种情况下,它在 Managed Object Context 中操作 Core Data 对象,而不是提交到磁盘,因此它执行速度的唯一限制是 CPU 时间。

这会导致 UI 线程问题吗?从理论上讲,如果 UI 线程想要 CPU 时间,它应该占用它。 sleep() 可以解决这个问题,但并不理想,因为您的后台任务需要更长的时间才能完成。

如果是这样,有没有办法打破工作,使其比 15k 项目循环更简单地分块?

循环中是否有使用互斥锁/@synchronise 运行的东西?这可能会导致延迟,然后它会在请求时降低其 CPU 时间,这可能会导致 UI 滞后。

【讨论】:

  • 它没有挂起 UI。但我也计划实施分块数据。或许能在一定程度上解决问题。感谢您的建议!
猜你喜欢
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
相关资源
最近更新 更多