使用PerfView监测.NET程序性能(三):分组
在上一篇博客使用PerfView監測.NET程序性能(二):Perfview的使用中,我們通過Perfview幫助文件中自帶的代碼來簡單使用了Perfview,了解了基本操作。現在來看看Perfview中的分組操作(Grouping)。分組功能都旨將記錄到的各種函數調用堆棧以指定的規則進行分組,幫助你組織和找到更關心的數據。
為什么需要分組
?在實際使用中,PerfView通常會收集到非常多的函數調用棧數據,包括我們關心的程序的函數調用信息,及一大堆我們不關心的其他函數調用信息,例如windows系統的底層函數。這么多有用沒用的條目都列出在列表視圖上,令人眼花繚亂。如何將我們不需要的數據分組歸納呢?Perfview提供分組功能。
分組功能使用類似于正則的匹配功能,將函數全名(一個函數的全名包含了程序集,命名空間,類名和函數名,例如"mscorlib.n!System.DateTime.get_Now()")進行匹配,并替換成自定義的分組名稱。例如,可以對所有在Debug目錄下的程序集的函數單獨顯示,而其他函數則分組成“OTHER”,這樣,我們就可以只看見我們程序里的函數調用。其實這就是默認的[Just My App]分組規則的作用:
?
通配符
那么,分組功能如何使用呢?
在使用分組之前,先看看PerfView定義的幾個"通配符":
* :匹配任意數量的字符
%:匹配任意數量的數字和英文字母和點號("."),等于.NET正則中的 [\w\d.]*
^ :匹配開頭
|:“或”操作
{}:代表一個分組,等于.NET正則里的小括號
?
分組規則
PerfView中有兩種分組操作,分別是 PAT->GROUP 和 PAT=>GROUP。在這里“PAT”代表需要匹配的模式(Pattern),“GROUP”代表你自定義的組名。 而這兩種分組方式區別就在于中間的“->”和"=>",前者表示忽略入口函數,后者則會將入口函數顯示在分組中。有時我們希望知道一個分組里的函數最初是由哪個函數開始調用的,這時候就可以使用后者了。除此之外,兩種分組方式沒有其他不同。
?我們看看具體的分組規則的使用:
1. PAT->GROUP形式
如上述,PAT->GROUP形式是簡單地將一個函數的全名稱中包含"PAT"字眼的條目都分到“GROUP”組中,例如,在不分組的情況下,我們收集到的函數調用數據列表是這樣的:
里面有我們Tutorial.exe的函數,例如,tutorial!Program.SpinForASecond()和tutorial!Program.RecSpin(),同時也有很多.NET的內部函數,例如 mscorlib.n!System.get_Now()和mscorlib.n!System.TimeSpan.get_TotalSeconds(),等等。假設我們只關心tutorial.exe自身的函數,而不希望被.NET內部函數所干擾,我們則可以設置一個分組規則“mscorlib->.NET”,這樣,所有包含“mscorlib”字眼的方法全名稱的條目都會被分組進“.NET”組,效果如下:
是不是清爽了很多?這樣的分組能使我們快速地過濾掉mscorlib有關的函數,只剩下tutorial自己的函數(和一些其他函數,當然如果你愿意,也可以將其他的函數"分組"掉)
?
2. {*}=>$1
該形式的規則意思是: 花括號里匹配到的條目會被分組,而組名正是是花括號里的匹配到的內容,“$1”是一個占位符,對應的是花括號“{}”里的內容。假設有兩個函數:tutorial!Program.SpinForASecond()和tutorial!Program.RecSpin(), 而應用的規則是“{tutorial!}->My APP $1”,則分組后,這兩個函數被分進一組,并且組名為“My App tutorial!”
Perfview還支持同時設置多個規則,例如設置規則為“{tutorial!}->My APP $1;{mscorlib.ni!}->Internal $1”,這里有兩個規則,一個是藍色部分,另一個是紅色部分,中間用分號(;)隔開。如果函數全名中有"tutorial!"的就分進名為“My APP tutorial!”組,而有“mscorlib.ni!”字眼的就分進“Internal?mscorlib.ni!”組。
?
3.PAT=>GROUP
最后來看看入口點規則分組(Entry Point Grouping)。前邊提到過,“PAT=>GROUP”與“PAT->GROUP”的不同在于,后者會忽略掉該組的入口函數,意味著你很難知道某個分組里的函數是從哪個函數執行進去的,而前者則會包含入口點函數信息。我們通過圖例來看看實際效果。
下圖中,使用“mscorlib->System Functions”規則來對mscorlib的函數進行分組,組名為“System Functions”,但除非你展開這個分組的明細,查找每個函數調用樹,否則你不知道是什么函數調用了這組函數。
?
而現在使用“mscorlib=>System Functions”,看看有什么不同:
System Functions組明確指示了該組的函數的入口點是“mscorlib.ni!System.DateTime.get_Now()”函數,即DateTime.Now導致了這些函數的執行。?
以上便是PerfView的分組功能。但其實這只是分組功能中的一部分。通過規則的搭配可以有更強大的效果。而最全面的說明其實是在PerfView自帶的F1幫助文件。這里只作一個拋磚引玉的簡要說明。因此如果需要了解更全面的分組技巧,可以去幫助文件里搜索相關主題。
總結
以上是生活随笔為你收集整理的使用PerfView监测.NET程序性能(三):分组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软发布新的 Azure Pipelin
- 下一篇: 【.NET Core项目实战-统一认证平