ios - 作为调试运行与作为发布运行(仪器作为发布运行)时的 CPU 使用率较高。如何调试?

标签 ios swift xcode instruments

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

该应用程序正在执行一些密集操作(?)。我使用 bezierpath 绘制实时心率(以及其他)图表。使用 Instruments 并不能真正告诉我哪里可能出现瓶颈。 (说实话,我不太擅长阅读输出)

(对于此图像,我使用了“反转调用树”、“隐藏系统库” enter image description here

我尝试花一些时间进行自己的分析

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 

最后,我找到了这个帖子 --> https://developer.apple.com/forums/thread/19936当我开始运行“release”时,高 CPU 使用率基本上消失了。

问题:

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

  2. 如果仪器以“release”配置运行,那么人们如何才能真正弄清楚幕后发生了什么?就像我的情况一样,我不知道 Instruments 正在以“release”身份运行,而正常运行 (Cmd-R) 正在以“Debug”身份运行。这是一个很大的不匹配,显然让我失望了。

  3. 那么..我是否有问题?我很可能会这样做,但我一生似乎都无法弄清楚为什么。

  4. iPad Mini2 确实又旧又慢。我从商店下载了一些 CPU/系统监控应用程序,然后运行它,我发现 CPU 使用率已经达到 40% (!!) 有没有办法在应用程序中收集 CPU 使用率数据?就像在打印语句中一样。

谢谢。

最佳答案

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

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

Xcode Change Build Configuration

  • 重点关注发布构建配置的时间分析,即使用您应用的人将看到的配置。

  • 查看 Apple 文档中的操作系统和 OSLog 框架引用,您可以通过选择“帮助”>“开发人员文档”在 Xcode 中阅读。操作系统和 OSLog 框架位于系统部分。这些框架是您从代码中收集分析数据的方式。

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

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

    关于ios - 作为调试运行与作为发布运行(仪器作为发布运行)时的 CPU 使用率较高。如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65746015/

    相关文章:

    ios - 无法在 Xcode UI 测试中点击 UIBarButtonItem

    android - 将文件保存在 iOS 应用程序目录中

    arrays - 看起来像字典的数组?

    xcode - Adobe Creative SDK 文件 Swift

    ios - Swift 5 (Xcode 11 Betas 5 & 6) - 如何写入 JSON 文件?

    ios - 如何使用 Swift 清除 SearchBar 结果并在 tableview 中显示完整数据?

    ios - Firebase Crashlytics 无法激活

    ios - NSDate 返回不同的答案

    ios - 快速将自定义类型转换为 CGFloat

    ios - 在 xcode 中启动时模拟器崩溃,问题出在 view.controller.init 中