使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择
在上一篇文章中,我们使用了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程序性能(三):分组
在上一篇博客中,我们通过Perfview帮助文件中自带的代码来简单使用了Perfview,了解了基本操作.现在来看看Perfview中的分组操作(Grouping).分组功能都旨将记录到的各种函数调用 ...
- 使用PerfView监测.NET程序性能(二):Perfview的使用
在上一篇博客中,我们了解了对Windows及应用程序进行性能分析的基础:Event Trace for Windows (ETW).现在来看看基于ETW的性能分析工具——Perfview.exe Pe ...
- 使用PerfView监测.NET程序性能(一):Event Trace for Windows
前言: 在日常项目开发中,我们时不时会遇到程序占用了很高CPU的情况,可能是程序里某些未经优化的代码或者Bug,或者是程序运行压力太大.无论是什么原因,我们总希望能看到到底是哪个方法占用了如此高的CP ...
- JVM-Java程序性能监控-初级篇
前篇 - 小伙们都知道,java程序的性能监控主要是针对jvm中heap的监控~ 那么在做压力测试时如何对heap.线程等一系列的指标进行的监控的呢? 首先-你若不懂命令,那么就需要了解一套Java程 ...
- 绝对好文:.NET程序性能的基本要领
Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...
- .NET程序性能的基本要领
前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...
- .NET程序性能优化基本要领
想了解更多关于新的编译器的信息,可以访问 .NET Compiler Platform ("Roslyn") 基本要领 在对.NET 进行性能调优以及开发具有良好响应性的应 ...
- .NET程序性能优化的基本要领
Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...
- java程序性能优化
一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...
随机推荐
- JSP属性的四种保存范围(page request session application)
JSP提供了四种属性的保存范围,分别为page.request.session.application 其对应的类型分别为:PageContext.ServletRequest.HttpSession ...
- Vuebnb 一个用 vue.js + Laravel 构建的全栈应用
今年我一直在写一本新书叫全栈Vue网站开发:Vue.js,Vuex和Laravel.它会在Packt出版社在2018年初出版. 这本书是围绕着一个案例研究项目,Vuebnb,简单克隆Airbnb.在这 ...
- 商业化博客平台原型制作分享-TypePad
TypePad是商业化博客平台,提供完全付费的博客服务,通过TypePad用户可以很容易建立自己的博客,TypePad提供博客系统该有的所有功能以及多种设计风格和外观,如果用户熟悉HTML和CSS,完 ...
- python SQLAlchemy对象映射和json.dumps无法序列化问题解决
from flask import Flask from flask_sqlalchemy import SQLAlchemy import Config2 import pymysql import ...
- servlet 高级知识之Listener
Listener,顾名思义,监听器.它可以监听客户端的请求.服务端的操作等. 通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当增加一个HttpSession时,就激发sessionCre ...
- 44、WebStrom下载和破解
WebStrom下载地址: http://www.pc6.com/mac/112553.html WebStrom 2017激活破解(http://blog.csdn.net/it_talk/arti ...
- php-fpm安装、配置与优化
转载自:https://www.zybuluo.com/phper/note/89081 1.php中fastcgi和php-fpm是什么东西 最近在研究和学习PHP的性能方面的知识,看到了factc ...
- 创建Java程序并设置快捷提示
1.new Java project 创建项目 2.new package 创建包,cn.com.test 3.创建Java文件 4.Java智能提示的设置 window/preference 在Au ...
- 百度图片http://img[0-9]\.imgtn.*?g此形式的链接图片下载方式
"""给出图片链接列表, 下载图片""" print(pic_urls) for pic_url in pic_urls: try: hos ...
- java常用设计模式八:代理模式
一.概述 代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 其特征是代理类与委托类有同样的接口,真正的核心业务逻辑还是在实际对象里面. 二.为什么要使用代理模式 当 ...