日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

使用PerfView监测.NET程序性能(三):分组

發(fā)布時(shí)間:2023/12/4 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用PerfView监测.NET程序性能(三):分组 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在上一篇博客使用PerfView監(jiān)測(cè).NET程序性能(二):Perfview的使用中,我們通過Perfview幫助文件中自帶的代碼來簡單使用了Perfview,了解了基本操作。現(xiàn)在來看看Perfview中的分組操作(Grouping)。分組功能都旨將記錄到的各種函數(shù)調(diào)用堆棧以指定的規(guī)則進(jìn)行分組,幫助你組織和找到更關(guān)心的數(shù)據(jù)。

為什么需要分組

?在實(shí)際使用中,PerfView通常會(huì)收集到非常多的函數(shù)調(diào)用棧數(shù)據(jù),包括我們關(guān)心的程序的函數(shù)調(diào)用信息,及一大堆我們不關(guān)心的其他函數(shù)調(diào)用信息,例如windows系統(tǒng)的底層函數(shù)。這么多有用沒用的條目都列出在列表視圖上,令人眼花繚亂。如何將我們不需要的數(shù)據(jù)分組歸納呢?Perfview提供分組功能。

分組功能使用類似于正則的匹配功能,將函數(shù)全名(一個(gè)函數(shù)的全名包含了程序集,命名空間,類名和函數(shù)名,例如"mscorlib.n!System.DateTime.get_Now()")進(jìn)行匹配,并替換成自定義的分組名稱。例如,可以對(duì)所有在Debug目錄下的程序集的函數(shù)單獨(dú)顯示,而其他函數(shù)則分組成“OTHER”,這樣,我們就可以只看見我們程序里的函數(shù)調(diào)用。其實(shí)這就是默認(rèn)的[Just My App]分組規(guī)則的作用:

?

通配符

那么,分組功能如何使用呢?

在使用分組之前,先看看PerfView定義的幾個(gè)"通配符":

* :匹配任意數(shù)量的字符

%:匹配任意數(shù)量的數(shù)字和英文字母和點(diǎn)號(hào)("."),等于.NET正則中的 [\w\d.]*

^ :匹配開頭

|:“或”操作

{}:代表一個(gè)分組,等于.NET正則里的小括號(hào)

?

分組規(guī)則

PerfView中有兩種分組操作,分別是 PAT->GROUP 和 PAT=>GROUP。在這里“PAT”代表需要匹配的模式(Pattern),“GROUP”代表你自定義的組名。 而這兩種分組方式區(qū)別就在于中間的“->”和"=>",前者表示忽略入口函數(shù),后者則會(huì)將入口函數(shù)顯示在分組中。有時(shí)我們希望知道一個(gè)分組里的函數(shù)最初是由哪個(gè)函數(shù)開始調(diào)用的,這時(shí)候就可以使用后者了。除此之外,兩種分組方式?jīng)]有其他不同。

?我們看看具體的分組規(guī)則的使用:

1. PAT->GROUP形式

如上述,PAT->GROUP形式是簡單地將一個(gè)函數(shù)的全名稱中包含"PAT"字眼的條目都分到“GROUP”組中,例如,在不分組的情況下,我們收集到的函數(shù)調(diào)用數(shù)據(jù)列表是這樣的:

里面有我們Tutorial.exe的函數(shù),例如,tutorial!Program.SpinForASecond()和tutorial!Program.RecSpin(),同時(shí)也有很多.NET的內(nèi)部函數(shù),例如 mscorlib.n!System.get_Now()和mscorlib.n!System.TimeSpan.get_TotalSeconds(),等等。假設(shè)我們只關(guān)心tutorial.exe自身的函數(shù),而不希望被.NET內(nèi)部函數(shù)所干擾,我們則可以設(shè)置一個(gè)分組規(guī)則“mscorlib->.NET”,這樣,所有包含“mscorlib”字眼的方法全名稱的條目都會(huì)被分組進(jìn)“.NET”組,效果如下:

是不是清爽了很多?這樣的分組能使我們快速地過濾掉mscorlib有關(guān)的函數(shù),只剩下tutorial自己的函數(shù)(和一些其他函數(shù),當(dāng)然如果你愿意,也可以將其他的函數(shù)"分組"掉)

?

2. {*}=>$1

該形式的規(guī)則意思是: 花括號(hào)里匹配到的條目會(huì)被分組,而組名正是是花括號(hào)里的匹配到的內(nèi)容,“$1”是一個(gè)占位符,對(duì)應(yīng)的是花括號(hào)“{}”里的內(nèi)容。假設(shè)有兩個(gè)函數(shù):tutorial!Program.SpinForASecond()和tutorial!Program.RecSpin(), 而應(yīng)用的規(guī)則是“{tutorial!}->My APP $1”,則分組后,這兩個(gè)函數(shù)被分進(jìn)一組,并且組名為“My App tutorial!”

Perfview還支持同時(shí)設(shè)置多個(gè)規(guī)則,例如設(shè)置規(guī)則為“{tutorial!}->My APP $1;{mscorlib.ni!}->Internal $1”,這里有兩個(gè)規(guī)則,一個(gè)是藍(lán)色部分,另一個(gè)是紅色部分,中間用分號(hào)(;)隔開。如果函數(shù)全名中有"tutorial!"的就分進(jìn)名為“My APP tutorial!”組,而有“mscorlib.ni!”字眼的就分進(jìn)“Internal?mscorlib.ni!”組。

?

3.PAT=>GROUP

最后來看看入口點(diǎn)規(guī)則分組(Entry Point Grouping)。前邊提到過,“PAT=>GROUP”與“PAT->GROUP”的不同在于,后者會(huì)忽略掉該組的入口函數(shù),意味著你很難知道某個(gè)分組里的函數(shù)是從哪個(gè)函數(shù)執(zhí)行進(jìn)去的,而前者則會(huì)包含入口點(diǎn)函數(shù)信息。我們通過圖例來看看實(shí)際效果。

下圖中,使用“mscorlib->System Functions”規(guī)則來對(duì)mscorlib的函數(shù)進(jìn)行分組,組名為“System Functions”,但除非你展開這個(gè)分組的明細(xì),查找每個(gè)函數(shù)調(diào)用樹,否則你不知道是什么函數(shù)調(diào)用了這組函數(shù)。

?

而現(xiàn)在使用“mscorlib=>System Functions”,看看有什么不同:


System Functions組明確指示了該組的函數(shù)的入口點(diǎn)是“mscorlib.ni!System.DateTime.get_Now()”函數(shù),即DateTime.Now導(dǎo)致了這些函數(shù)的執(zhí)行。?

以上便是PerfView的分組功能。但其實(shí)這只是分組功能中的一部分。通過規(guī)則的搭配可以有更強(qiáng)大的效果。而最全面的說明其實(shí)是在PerfView自帶的F1幫助文件。這里只作一個(gè)拋磚引玉的簡要說明。因此如果需要了解更全面的分組技巧,可以去幫助文件里搜索相關(guān)主題。


總結(jié)

以上是生活随笔為你收集整理的使用PerfView监测.NET程序性能(三):分组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。