-
非獨佔樣本數: 爲函數收集的性能數據的總數,其中包括該函數調用的其餘函數的性能數據。
-
非獨佔轉換次數: 在此函數(包括此函數調用的函數)的全部實例中發生操做系統(轉換)事件的次數。
其它性能數據解釋能夠參看:http://msdn.microsoft.com/zh-cn/library/ms242747(v=vs.90).aspx。函數
固然,就算看不懂兩個數據表示的具體意義也無礙於咱們分析性能瓶頸,反正數值大的確定是性能瓶頸。不過,爲了更好的使用這個工具,仍是稍微理解點的好。工具
爲了通俗的解釋這兩個指標,我這裏寫了兩個簡單的函數Foo1和Foo2,其中Foo1調用了Foo2,其它的函數體是同樣的。post
static void Foo1()
{
var total = 0;
for (int i = 0; i < 10000 * 10000; i++)
{
total += i;
}
Foo2();
}
static void Foo2()
{
var total = 0;
for (int i = 0; i < 10000 * 10000; i++)
{
total += i;
}
} 性能
咱們的調用方式以下: spa
static void Main(string[] args)
{
System.Threading.Thread.Sleep(2000); //等待採集器啓動須要一段時間
Foo1();
} 操作系統
此時生成的性能報告以下: blog
函數名生命週期 |
非獨佔樣本數進程 |
獨佔樣本數事件 |
非獨佔樣本數百分比 |
獨佔樣本數百分比 |
ConsoleApplication1.Program.Foo1 |
526 |
289 |
99.81 |
54.84 |
ConsoleApplication1.Program.Foo2 |
237 |
237 |
44.97 |
44.97 |
對於Foo2,它的獨佔樣本數和非獨佔樣本數是同樣的;而對於Foo1它的非獨佔樣本數是獨佔樣本數的兩倍。
從中能夠看出:
-
非獨佔樣本數是指的包括了子函數執行時間的總執行時間
-
獨佔樣本數是不包括子函數執行時間的函數體執行時間
若是把Main函數的採集數據放在一塊兒就更容易理解了:Main函數獨佔樣本數百分比爲0,由於它的函數體執行時間幾乎忽略不計,而非獨佔樣本數百分比爲100%,由於它在整個進程的生命週期內都存在。
函數名 |
非獨佔樣本數 |
獨佔樣本數 |
非獨佔樣本數百分比 |
獨佔樣本數百分比 |
ConsoleApplication1.Program.Foo1 |
526 |
289 |
99.81 |
54.84 |
ConsoleApplication1.Program.Foo2 |
237 |
237 |
44.97 |
44.97 |
ConsoleApplication1.Program.Main |
527 |
0 |
100 |
0 |