Xcode 了解Instruments Time Profiler列标题

Xcode 了解Instruments Time Profiler列标题,xcode,instruments,definition,timing,Xcode,Instruments,Definition,Timing,我正在以1ms的采样率通过分析器运行应用程序,但我无法理解列标题的含义。虽然我设法从答案中破译了Self、#Self和Self%,但似乎缺少大多数列标题的定义。这就是我到目前为止所做的: 总样本数:程序在给定函数中的总(1毫秒)样本数 总时间:在函数中花费的总时间(对应于使用1ms采样率的总采样) Self:在链接问题中解释,但它与总时间有什么区别?我应该能够从中理解#Self和Self%的含义 总百分比:总样本数占总运行时间的百分比 其余的列标题似乎是上述的组合(可能是由于1ms的采样率)

我正在以1ms的采样率通过分析器运行应用程序,但我无法理解列标题的含义。虽然我设法从答案中破译了Self#SelfSelf%,但似乎缺少大多数列标题的定义。这就是我到目前为止所做的:

  • 总样本数:程序在给定函数中的总(1毫秒)样本数
  • 总时间:在函数中花费的总时间(对应于使用1ms采样率的总采样)
  • Self:在链接问题中解释,但它与总时间有什么区别?我应该能够从中理解#SelfSelf%的含义
  • 总百分比:总样本数占总运行时间的百分比

其余的列标题似乎是上述的组合(可能是由于1ms的采样率),或者是不言自明的。例如,我有一个函数的总时间为647621ms(89.4%),但Self/#Self为9。这是否意味着该函数经常被调用,但执行时间很短?另一方面,另一个函数的总时间为15559ms(2.1%),但Self/#Self为13099,这意味着调用该函数的频率较低,但完成该函数所需的时间更长。我走对了吗?

最新版本的仪器没有“总样本”列,但我将解释总样本、总时间和自我之间的区别,因为它解释了时间分析器仪器的工作原理。时间分析器工具定期记录调用堆栈,默认情况下每毫秒记录一次。Total Samples列告诉您方法在调用堆栈中的样本数。Total Time列告诉您方法在调用堆栈中的时间量。Self列告诉您方法位于调用堆栈顶部的样本数,这意味着您的应用程序在Instruments记录样本时处于该方法中

Self列比Total Samples和Total Time列重要得多。main()函数的总样本数和总时间都很高,因为在应用程序运行的整个过程中,main()都在调用堆栈中。但是在Cocoa/Cocoa Touch应用程序中花时间优化main()函数是浪费时间,因为main()所做的一切就是启动应用程序。专注于具有高自我价值的方法


最新版本的仪器有一个运行时间列。列中的每个列表都有两个值:时间和百分比。时间对应于问题中的总时间。百分比与问题中的总百分比相对应

更新

让我回答最后一段中有关函数示例的问题。在第一个示例中,您的应用程序没有在函数内部花费太多时间(我将其称为函数A),因为它的自输入仅为9。这意味着您的应用程序在函数A中的示例只有9个。高总时间意味着您的应用程序在函数A调用的函数中花费了大量时间。函数A经常位于调用堆栈中,但不经常位于调用堆栈的顶部


在第二个示例中,应用程序在函数B中花费的时间更多,因为它的自输入是13099。应用程序不会在函数B调用的函数上花费很多时间,因为总时间要小得多。函数B位于调用堆栈顶部的频率高于A,而在调用堆栈中的频率低于A。如果您的应用程序中存在性能问题,则函数B将是检查提高其性能的方法的函数。优化函数A不会有多大帮助,因为它的自输入值只有9。

谢谢。这比文档更有意义,尤其是关于main()的内容。这是否也意味着我的两个函数的例子得到了正确的分析?谢谢!这完美地概括了它:)@MarkSzymczyk我有一个后续问题。我一直在苦苦思索,为什么Instagram和Snapchat等应用程序的启动速度要比我的快得多,而它们似乎有类似的要求(例如类似的摄像头和查询)。“Self”标题下没有弹出任何内容,只有一个在“Running Time”标题下弹出,即“main”,但当我单击main时,它只会转到AppDelegate,并显示AppDelegate是100%。你说main()所做的就是启动应用程序,但为什么我的应用程序比其他应用程序花费的时间要长呢?我希望这个问题有意义。如果您愿意的话,我可以单独发问。@user3498976您最好再问一个关于启动时间缓慢的问题。我不做很多iOS开发,所以我无法帮助解决您的具体问题,但您应该看看应用程序启动时调用的代码。示例包括AppDelegate和视图控制器中的init和view加载方法。@MarkSzymczyk感谢您的响应。我在这里发布了一个新问题:再次感谢!