当 运行 作为调试与作为发布(仪器 运行 作为发布)时,高 CPU 使用率。如何调试?

High CPU Usage when run as Debug vs as Release (Instruments run as Release). How to Debug?

当 运行 在旧硬件(iPad mini 2,接近 7 岁)上运行时,我的应用程序一直存在我认为的性能问题。不幸的是,这似乎是零星的,其中 2/10 倍 运行 没问题,其余的,CPU 随着时间的推移,使用率上升到 90%。

该应用程序正在做一些强化(?)。我使用 bezierpath 绘制实时心率(以及其他)图表的 drawRect 东西。使用 Instruments 并不能真正告诉我可能出现瓶颈的地方。 (TBH,我不是很擅长阅读输出)

(对于这张图片,我使用了 'invert call tree'、'hide system libraries'

我尝试进行一些时间分析

let start = CFAbsoluteTimeGetCurrent()
let end = CFAbsoluteTimeGetCurrent() - start
print("drawRect END:\(Date()) - total Secs:\(end)")

虽然它比我的 iPhone 7 慢,但我认为它仍然可以接受。

drawRect END:2021-01-16 00:39:26 +0000 - total Secs:0.002599000930786133 
drawRect END:2021-01-16 00:39:27 +0000 - total Secs:0.001813054084777832
drawRect END:2021-01-16 00:39:28 +0000 - total Secs:0.0019180774688720703
drawRect END:2021-01-16 00:39:29 +0000 - total Secs:0.0016759634017944336 

最后,我发现了这个 post --> https://developer.apple.com/forums/thread/19936 并且当我将 运行 作为“发布”启动时,CPU 的高使用率基本上消失了离开。

问题:

  1. 在正常的应用程序开发过程中,我同意 运行ning as Debug 会有好处,但实际好处是什么?调试配置有何不同? (一些阅读 material / 链接会很好)TQ

  2. 如果仪器 运行ning 作为“release”配置,那么人们如何才能真正弄清楚引擎盖下发生了什么?就像我的情况一样,我不知道 Instruments 是 运行ning 作为“release”而正常的 运行 (Cmd-R) 是 运行ning作为“调试”。这是一个很大的不匹配,显然让我失望了。

  3. 所以..我有问题还是没有?我很可能会这样做,但我这辈子似乎无法弄清楚为什么。

  4. iPad Mini2 肯定又旧又慢。我从商店下载了一些 CPU/System 监控应用程序,然后 运行 将其打开我看到 40% CPU 使用率已经 (!!) 有没有办法收集 CPU 使用率应用程序中的数据?就像在 Print 语句中一样。

谢谢。

  1. 调试配置的好处是它可以让您调试应用程序。调试配置可让您查看诸如变量值之类的内容。如果您尝试使用 Release 配置调试您的应用程序,您会看到内存地址而不是变量名。调试构建配置牺牲了调试能力的速度。 Release 构建配置牺牲了调试速度。

  2. 如果您想在调试配置中查看 运行 时遇到的问题,请编辑您的项目方案并告诉 Xcode 使用调试配置进行分析.然后Instruments可以帮你找到Debug配置中代码的慢点在哪里。

  1. 关注发布构建配置的时间分析,使用您的应用程序的人将看到的配置。

  2. 查看 Apple 文档中的 os 和 OSLog 框架参考,您可以在 Xcode 中选择 osing Help > Developer Documentation 阅读它们. os 和 OSLog 框架位于系统部分。 os框架是您从代码中收集分析数据的方式。

有关 Time Profiler 工具的更详细说明,请阅读以下文章:

Finding the Slow Spots in Your Code with the Time Profiler Instrument