可以看到平均时常都需要 300ms ,现在我们点击 GetSnapshot and Wait 按钮,会弹出分析窗口,并且我们随时可以通过再次点击 Start 按钮,继续分析。
2.2 分析代码 2.2.1 概览信息Tracing 分析的界面比较简单,一个 All Calls 页签与 Overview (概览) 的页签,首先我们大致看一下概览窗口。
可以看到他给我们标识了用户代码执行周期最长的一些地方,其次也用柱状图很直观地体现了耗时最长的代码分类。
右侧则提列了一些快照的信息与运行时的环境信息,以便用户作为参考。
2.2.2 Threads Tree (线程信息)本窗口主要的作用是分析应用程序里面发生的所有的线程活动,主线程有一个
图标,而终结器线程则是拥有一个 图标,剩下的都是线程池内部的工作线程。在这里我们以主线程为例,分析一下其具体内容所表达的意思。
Main:代表不带命名空间的方法简称。
99 . 99 %:代表该方法针对于整个线程运行时间所占的百分比,这里的意思就是 Main 方法占用了整个主线程运行时间的 99.99 %。
523,732 ms:代表该方法与子方法执行的总时间。
1 call:方法在堆栈上所被调用的次数。
XXX.Web.Host.Startup.Program.Main(string[] ):被调用方法的全称,
2.2.3 Call Tree (调用树)一般我们使用本页面的时候会多一点,这个页面会显示在所有线程中的所有被调用的方法。其每一个根节点代表的是每一个线程所执行的一个根函数,而下面每一个节点则代表其根函数内部调用的子函数的相关性能分析信息。
那么我们如何快速定位我们刚才测试的接口呢?
按下 Ctrl+F ,会弹出搜索框,在里面输入我们所编写的接口方法名字,按下回车就会快速定位了。
之后我们会看到如下内容:
通过展开节点我们可以知道最耗费时间的方法,即为 GetAll 方法,当点击节点的时候,右侧也会定位到相应的代码位置。
这里可以看到整个 GetAll 方法使用了 1015ms 的时间,这是为什么呢?你可以看到在其右侧有一个 8 calls ,这个时间是 8 次调用总共所花费的时间。
右键节点,你可以通过 Properties 可以看到该方法的平均执行时间:
可以看到其自身只花费了 8.3 μs,说明真正执行缓慢的还在其更深层,这里就不再往里面跟了,如果需要更加详细的性能报告,可以不使用 Tracing 模式,而使用 Line-by-line 模式来进行分析。
2.2.4 Plain List (简单列表)以平铺的方式展示所有被调用过的方法列表,让你分析具体代码。