在上一篇文章中,咱們使用了Perfview的分組功能。分組功能旨在對某些函數按照某個格式進行分組,以減小視圖中的各類無關函數的數量。但僅有分組還不夠,有時咱們想將一些函數調用信息按某些條件過濾掉,例如將採用小於1%的函數調用信息去掉,或者將函數名中包含某個字眼的函數信息去掉,甚至只顯示某個時間段調用的函數。這就須要用到PerfView提供的過濾(Filtering)功能了。PerfVIew提供了3種過濾功能:摺疊(Folding),匹配過濾,和時間範圍選擇(Set Time Range)html
PerfView在界面上提供了兩種Folding功能:「Fold%」 和 「FoldPats」.函數
「Fold%」意思是,將採樣少於該百分比的函數調用信息條目「摺疊」掉,並將其採樣時間累加到這些函數的調用者。這裏「摺疊」的意思其實應該說是隱藏掉。性能
「FoldPats」:與「Fold%」相似,會將符合條件的函數調用記錄「摺疊」(或「隱藏」)掉,而它的採樣時間將會算在它的直接調用者頭上。而與「Fold%」不一樣的是它的條件不是「Inc%」的值,而是函數名稱中符合給定的匹配模式。同時,這個功能也支持指定多個模式,不一樣模式之間用";"(分號)隔開。spa
摺疊功能能實現過濾的效果,只是被過濾的項的採樣時間會被累加到調用者身上。有時咱們其實只想簡單地去掉一些咱們不關心的函數,同時也不須要保留它們的採樣時間。這時,咱們能夠採用「簡單粗暴」的過濾方式。翻譯
"IncPats":能夠設置一個或多個模式(多個時用分號";"隔開),只有當函數名稱匹配一個或者多個給定的模式時,這個函數會被顯示在列表上,不匹配的會被從列表上刪除。htm
"ExcPats":能夠設置一個或多個模式(多個時用分號";"隔開),只有當函數名稱匹配一個或者多個給定的模式時,這個函數會從列表上刪除。blog
所以,"IncPats"和"ExcPats"是一對反義詞,前者是「匹配則保留」,後者是「匹配則刪除」ip
這裏說的模式,和上一篇文章中說的「通配符」是同樣的,或者能夠參考幫助文件,或者在界面上對於的ToolTip提示中也有說明。資源
例如,如下圖例的設置中,在」IncPats「框中設置」Process% ConsoleApp7 (4108)「,起到只顯示個人程序」ConsoleApp7「的函數調用堆棧文檔
有時咱們但願能只顯示某一段時間內的函數調用狀況,Perfview也提供時間範圍選擇的功能,在界面上提供了"Start"和"End"兩個輸入框。但要注意的是,這裏的時間範圍不是以絕對的時間值(好比:2018/12/27 23:15:02),而是從開始收集時經歷的毫秒數。假設你某個時間開始收集,5秒後中止,你想只看第3秒到第4秒的數據,就能夠在Start中設置"3000",在End中設置"4000",Perfview只顯示大於或等於3000毫秒小於或等於4000毫秒的函數調用數據。
不只只提供文本框輸入值的功能,Perfview還提供一個更便利的時間範圍選擇功能,以下圖:
在」When「一列中,顯示了一串文本值,一共32個,由數字字母和一些符號組成。這串由符號組成的」字符串「表明了該函數在收集過程當中被採樣數(能夠理解成出現的頻繁度),具體來講,Pferview將每個函數的」Inclusive「時間分紅32"段",每一段的不一樣符號表明瞭該函數的」Inclusive「時間的比例值:(如下內容是從幫助文檔中COPY的,稍做翻譯)
」_「 表明在該段"時間段"內沒有采樣(means no samples occurred in that bucket. )
」.「表明在該段"時間段"內有0%到0.1%的Inclusive時間 (means that interval consumed between 0% and .1%. )
」o」 表明在該段"時間段"內有1% 到 1%的Inclusive時間(means that interval consumed between .1% and 1%. )
」0」 表明在該段"時間段"內有1% 到10%的Inclusive時間(means that interval consumed between 1% and 10%. )
」1」 表明在該段"時間段"內有10% 到 20%的Inclusive時間(means that interval consumed between 10% and 20% )
...
」9 表明在該段"時間段"內有90% 到100%的Inclusive時間(means that interval consumed between 90% and 100% )
」A」 表明在該段"時間段"內有100% 到110%的Inclusive時間(means that interval consumed between 100% and 110% )
...
」Z」 表明在該段"時間段"內有350% 到360%的Inclusive時間(means that interval consumed between 350% and 360% )
」*」 表明在該段"時間段"內有超過360%的Inclusive時間(means that interval consumed over 360%)
」a」 表明在該段"時間段"內有0% 到-10%的Inclusive時間(means that interval consumed between 0% and -10% )
」b」 表明在該段"時間段"內有-10% 到-20%的Inclusive時間(means that interval consumed between -10% and -20% )
...
」z」 表明在該段"時間段"內有-250% 到-260%的Inclusive時間(means that interval consumed between -250% and -260% )
」*」 表明在該段"時間段"內有超過 -260 %的Inclusive時間(means that interval consumed over -260 %) 這個我不是很清楚,不是表明360%嗎??
另外,爲何會有些值是超過100%呢? 按文檔的解釋,應該是有多個可消耗的資源單元,例如200%表明某個函數在2個CPU上都有100%的INCLUSIVE時間,但我不肯定是否理解正確。
那怎麼在「When」欄中進行時間範圍選擇呢?
能夠雙擊「When」欄的文本值,而後用鼠標光標選擇一段或整段文本(就像平時選擇一段文字進行ctrl+c ctrl+v同樣),而後右擊並在右鍵菜單中選擇「Set Time Range」,如圖:
這樣,該時間範圍的值就會被設置到"Start"和「End」中,並進行過濾。
以上即是Perfiveiw中的幾種數據過濾功能,仍是那句話,這裏涉及只介紹了基本的功能,更多更具體的功能說明,能夠查看幫助文檔。
使用PerfView監測.NET程序性能(一):Event Trace for Windows