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 使用率的更改