上一篇文章中,我们使用了Perfview的分组功能。分组功能旨在对某些函数按照某个格式进行分组,以减少视图中的各种无关函数的数量。但仅有分组还不够,有时我们想将一些函数调用信息按某些条件过滤掉,例如将采用小于1%的函数调用信息去掉,或者将函数名中包含某个字眼的函数信息去掉,甚至只显示某个时间段调用的函数。这就需要用到PerfView提供的过滤(Filtering)功能了。PerfVIew提供了3种过滤功能:折叠(Folding),匹配过滤,和时间范围选择(Set Time Range)

折叠(Folding)

PerfView在界面上提供了两种Folding功能:“Fold%” 和 “FoldPats”.

“Fold%”意思是,将采样少于该百分比的函数调用信息条目“折叠”掉,并将其采样时间累加到这些函数的调用者。这里“折叠”的意思其实应该说是隐藏掉。

“FoldPats”:与“Fold%”类似,会将符合条件的函数调用记录“折叠”(或“隐藏”)掉,而它的采样时间将会算在它的直接调用者头上。而与“Fold%”不同的是它的条件不是“Inc%”的值,而是函数名称中符合给定的匹配模式。同时,这个功能也支持指定多个模式,不同模式之间用";"(分号)隔开。

过滤(Filtering)

折叠功能能实现过滤的效果,只是被过滤的项的采样时间会被累加到调用者身上。有时我们其实只想简单地去掉一些我们不关心的函数,同时也不需要保留它们的采样时间。这时,我们可以采用“简单粗暴”的过滤方式。

"IncPats":可以设置一个或多个模式(多个时用分号";"隔开),只有当函数名称匹配一个或者多个给定的模式时,这个函数会被显示在列表上,不匹配的会被从列表上删除。

"ExcPats":可以设置一个或多个模式(多个时用分号";"隔开),只有当函数名称匹配一个或者多个给定的模式时,这个函数会从列表上删除。

因此,"IncPats"和"ExcPats"是一对反义词,前者是“匹配则保留”,后者是“匹配则删除”

这里说的模式,和上一篇文章中说的“通配符”是一样的,或者可以参考帮助文件,或者在界面上对于的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

使用PerfView监测.NET程序性能(二):Perfview的使用

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

使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择

使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择的更多相关文章

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

    在上一篇博客中,我们通过Perfview帮助文件中自带的代码来简单使用了Perfview,了解了基本操作.现在来看看Perfview中的分组操作(Grouping).分组功能都旨将记录到的各种函数调用 ...

  2. 使用PerfView监测.NET程序性能(二):Perfview的使用

    在上一篇博客中,我们了解了对Windows及应用程序进行性能分析的基础:Event Trace for Windows (ETW).现在来看看基于ETW的性能分析工具——Perfview.exe Pe ...

  3. 使用PerfView监测.NET程序性能(一):Event Trace for Windows

    前言: 在日常项目开发中,我们时不时会遇到程序占用了很高CPU的情况,可能是程序里某些未经优化的代码或者Bug,或者是程序运行压力太大.无论是什么原因,我们总希望能看到到底是哪个方法占用了如此高的CP ...

  4. JVM-Java程序性能监控-初级篇

    前篇 - 小伙们都知道,java程序的性能监控主要是针对jvm中heap的监控~ 那么在做压力测试时如何对heap.线程等一系列的指标进行的监控的呢? 首先-你若不懂命令,那么就需要了解一套Java程 ...

  5. 绝对好文:.NET程序性能的基本要领

    Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...

  6. .NET程序性能的基本要领

    前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...

  7. .NET程序性能优化基本要领

    想了解更多关于新的编译器的信息,可以访问     .NET Compiler Platform ("Roslyn") 基本要领 在对.NET 进行性能调优以及开发具有良好响应性的应 ...

  8. .NET程序性能优化的基本要领

    Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...

  9. java程序性能优化

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

随机推荐

  1. 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述

            一.概述         Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作.     二.socket概述     ...

  2. 2017/2/14:JSTL标签与el表达式

    一.JSTL标签介绍 1.什么是JSTL? JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...

  3. 【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC

    如果要对硬币进行分类,我们对硬币根据不同的尺寸重量来告诉机器它是多少面值的硬币 这种对应的机器学习即使监督学习,那么如果我们不告诉机器这是多少面额的硬币,只有尺寸和重量,这时候让机器进行分类,希望机器 ...

  4. Django的学习(二)————Templates

    一.django的模板: 在settings.py的文件中可以看到并设置这个模板. 1.直接映射: 通过建立的文件夹(templates)和文件(html)来映射. <!DOCTYPE html ...

  5. 746. Min Cost Climbing Stairs

    两种方法,核心思想都一样,求出走到每一步上的最小开销,直到最后一步和倒数第二步,比较其最小值返回即可. 方法一,用一个辅助的容器 class Solution { public: int minCos ...

  6. 2018.10.27 loj#2292. 「THUSC 2016」成绩单(区间dp)

    传送门 g[i][j][k][l]g[i][j][k][l]g[i][j][k][l]表示将区间l,rl,rl,r变成最小值等于kkk,最大值等于lll时的花费的最优值. f[i][j]f[i][j] ...

  7. boost--BOOST_AUTO、typeof、result_of

    1.BOOST_AUTO BOOST_AUTO的功能类似于auto和any,可以用来定义任意类型数据,且可以在编译时自动推导出表达式的类型.BOOST_AUTO属于boost中的typeof库,使用需 ...

  8. High-radix routers

    The idea is to reduce H (hops), by adding explicit links between physically distant routers, thus re ...

  9. SQL语句之奇形怪状的冷门函数

    lag() over() ) OVER(ORDER BY C.column) FROM Table C; 第一条记录已经无法再取前一条记录,所以LAG()函数返回空. SQL为意思如下. LAG(C. ...

  10. vba遗传算法之非一致性突变

    http://www.docin.com/p-959323141-f4.html Sub 非一致性变异() Dim totalGenerate As Integer, currentGenerate ...