Xcode Time Profiler 的详细信息面板显示“main”是应用程序运行缓慢的原因,但没有在其中显示单独的方法调用。

Posted

技术标签:

【中文标题】Xcode Time Profiler 的详细信息面板显示“main”是应用程序运行缓慢的原因,但没有在其中显示单独的方法调用。【英文标题】:Xcode Time Profiler's detail panel shows that "main" is the reason for app's sluggishness, without showing separate method calls inside it. 【发布时间】:2018-08-02 10:41:30 【问题描述】:

我创建了一个演示应用程序,它将多个过滤器应用于图像(它位于项目内部)并在 UIScrollView 中显示按钮,并将该图像设置为背景图像。因此,所有逻辑都发生在一个直接从viewDidLoad 调用的方法中。我没有使用任何线程机制,所以所有的工作都发生在主线程上。 我正在使用Instruments,特别是Time Profiler 来找出应用程序启动如此缓慢的原因(很明显,但我想在Time Profiler 中看到它)。

当我运行它时,我会在详细信息面板(在根目录中)中得到以下结果:

当我按下箭头查看实际代码时,我得到以下信息:

这适用于每个过滤器操作。

面板不应该显示我在其中进行过滤的实际方法吗?

【问题讨论】:

主列表是调用树中唯一的列表吗? @MarkSzymczyk,它是唯一消耗大部分资源的。我只是选择了图表中具有最高选择的单独部分,并且该部分的 95.5%(在上面的示例中)仅由 main 消耗。当我点击箭头查看方法时,它只显示main,当我双击它时,结果就像上面的第二张图片一样。 【参考方案1】:

main 函数不是导致您的应用运行缓慢的原因。在您的屏幕截图中,main 的列表显示您在 main 中花费了 0 秒。

Time Profiler 仪器每秒记录调用堆栈 1000 次。 main 函数是您的应用程序的起点。这意味着main 将在您的应用程序运行的大部分时间位于调用堆栈上,即使您的应用程序大部分时间不在main 中。调用堆栈上的 main 函数是屏幕截图中 649 毫秒和 95.5% 列表的原因。

不要担心main 函数的列表。你无法控制main

如果您想在调用树中找到您的函数,请选中反转调用树和隐藏系统库复选框。选中这些复选框可以更轻松地在调用树中找到您的代码。

【讨论】:

是的,我尝试过使用这些过滤器。我以前没有经常使用时间分析器,所以这就是我问这个问题的原因。无论如何,谢谢你的解释。我想知道main因为选择了一个图表的一部分,它显示了CPU的高使用情况,最高数字通常在它面前。 span>

以上是关于Xcode Time Profiler 的详细信息面板显示“main”是应用程序运行缓慢的原因,但没有在其中显示单独的方法调用。的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Instruments Time Profiler 了解哪些方法花费的时间最多

Instruments Time Profiler 对 CPU 使用率的更改

Unity Profiler联调Xcode性能分析

Time Profiler:快速展开树

XCode Debugger(调试模式项目)在某行没有断点停止,Profiler 在同一行崩溃

instrument之Time Profiler总结