自定义Windows性能监视器
Windows 性能监视器是一个很好用的自带监视工具,对于一些基本简单的监视需求可以轻松满足。本文主要总结了一下如何将自己应用中的一些性能数据暴露到性能监视器上方便管理。
什么?不知道什么是Windows性能监视器?
“Microsoft 管理控制台 (MMC) 管理单元,提供用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。” - MSDN[1]
使用场景
需要记录自己开发的应用中一些性能方面的数据,比如说我有一个 WCF的应用,我需要记录下来每分钟应用处理的请求数量,请求的平均处理时间。通过这些数据可以用来对应用进行监控,也可以进行一些分析。如果将这些数据储存成自己的形式将会带来很多其他的工作,如果暴露给性能监视器的话就要简单很多。
使用方法
关键类型:
PerformanceCounterCategory:这个对应着监视器上的一个组,可以包含很多个计数器( Counter)
CounterCreationData:定义计数器的名称和一些帮助字符串的类,主要是在创建的时候用到。
PerformanceCounterType:每一个计数器都需要制定一个类型,这个枚举提供了所有的计数器类型。参考 MSDN可以看到每一个类型的适用范围以及这个类型的计算公式。[3]
PerformanceCounter:这个是真正去暴露数据的类型,通过这个类型我们可以将我们统计到的数据暴露给性能监视器。
步骤:
写了一个例子用来记录操作总数。
一、 创建自定义类型并添加到系统中:
private const string CategoryName = "Sample Category";
private const string CategoryHelp = "This is just a sample Category";
private const string TotalOperationName = "Total Operation Counter";
private const string TotalOperationHelp = "Count of Total Operation";
//检测系统中是否已经存在这个类别//如果需要修改这个类别里面的内容的话就需要删除重新添加这里删除是为了if (PerformanceCounterCategory.Exists(CategoryName))PerformanceCounterCategory.Delete(CategoryName);//创建你需要的计数器 CounterCreationDataCollection collection = new CounterCreationDataCollection();CounterCreationData totalOperation =new CounterCreationData(TotalOperationName, TotalOperationHelp, PerformanceCounterType.NumberOfItems32);collection.Add(totalOperation);//调用Create 方法在你本地电脑注册这个计数器类别以及其中的一些计数器 PerformanceCounterCategory.Create(CategoryName,CategoryHelp,PerformanceCounterCategoryType.SingleInstance,collection);
注意点:
1. 强烈建议在应用安装或者部署的时候创建计数器类别,而不是在运行时进行添加。因为如果运行时添加的话可能性能监视器来不及刷新,从而导致出错。[2]
2. 创建计数器类别需要管理员权限,这也从另一个方面说明最好在安装或者部署的时候创建,因为极有可能运行的时候是没有管理员权限的。
3. 选择PerformanceCounterType的时候最好去MSDN上去找一个最适合你需求的那个类型。[3]
二、运行时创建PerformanceCounter
PerformanceCounter m_totalOperationCounter = new PerformanceCounter(CategoryName, PerformanceCounterTotalOperationName, false);
注意点:
1. 通过类别名和计数器名从系统中找到之前我们注册过的计数器,最后一个参数设为false因为我们需要进行写操作。
2. 这个类除了可以用来写计数器以外还可以从系统中读取某一个指定的计数器,比如说CPU的使用率,内存使用率等数据。
3. 除了可以从本地电脑读取性能参数以外,还可以从局域网中的其他电脑中读取数据。
三、写入数据
运行时根据自己的需要去改变那个计数器,可以通过调用Increment等方法对计数器进行自增,也可以直接给RawData进行赋值(但是要注意线程安全)
for (int i = 0; i < 100; i++){//这是我自己封装的一个方法 PerfCounterSample.Instance.IncreaseOpCounter();//模拟处理 Thread.Sleep(new Random().Next(2000));} public void IncreaseOpCounter(){m_totalOperationCounter.Increment();}
还有另一种比较好的方式就是不直接操作计数器,而是将数据记录在一个地方,然后定时的去刷新到计数器中。
for (int i = 0; i < 100; i++) {count++;//模拟处理Thread.Sleep(new Random().Next(2000)); }
Timer m_Timer = new Timer(); m_Timer.AutoReset = true; m_Timer.Interval = 1000.0;//1 Second m_Timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed); m_Timer.Start();
void Timer_Elapsed(object sender, ElapsedEventArgs e){lock (m_totalOperationCounter){m_totalOperationCounter.RawValue = count;} }
注意点:
1. 我觉得这里主要是要注意线程安全和这个最终计数器数值的运算方式(这个要看你的需求啦)。
四、在性能监视器中添加我们的计数器
首先运行程序去系统中注册我们的计数器,然后打开性能监视器将我们的计数器加到监视列表中。
大功告成啦!
示例代码:
Reference:
1. MSDN,Windows 性能监视器概述
2. MSDN,PerformanceCounterCategory.Create
3. MSDN,PerformanceCounterType 枚举
转载于:https://www.cnblogs.com/imjustice/p/custome_windows_performance_monitor.html
自定义Windows性能监视器相关推荐
- 简要Windows性能监视器
简要Windows性能监视器: 打开Windows性能监视器的步骤如下: 开始→运行→perfmon→确定 在这里我们可以选择添加我们要监控的计数器,比如:cpu使用率.内存使用量等,作为asp.ne ...
- Windows 性能监视器perfmon是干嘛的?一篇文章了解性能监视器基本使用
Windows 性能监视器perfmon是干嘛的?一篇文章了解性能监视器基本使用 在PerfMon中使用性能计数器 有价值的调试计数器 重要的CPU计数器 内存的重要计数器 ASP.NET重要计数器 ...
- [原创]性能测试之“Windows性能监视器”
[原创]性能测试之"Windows性能监视器" 一 Windows性能监视器 以下用Winxp中的"Windows性能监视器"为例说明: 打开控制面板-> ...
- (转)Windows 性能监视器工具-perfmon
Windows 性能监视器工具 如果需要在一台计算机上监视多个 Report Server 实例,可以同时或单独监视这些实例.选择要包括的实例是计数器添加过程的一部分.有关使用 Windows 附带的 ...
- [转]Windows 性能监视器工具-perfmon
2019独角兽企业重金招聘Python工程师标准>>> Windows 性能监视器工具 如果需要在一台计算机上监视多个 Report Server 实例,可以同时或单独监视这些实例. ...
- Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)
作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Windows 性能监视器的一些基本指标(CPU,内存,硬盘参数),希望对大家将来 ...
- 服务器性能数据收集,使用 Windows 性能监视器收集数据
若要监视资源使用量和服务器进程,您可以使用 Windows 服务器附带的 Windows 性能监视器 (PerfMon).使用 PerfMon 来收集详细性能信息,包括 CPU 的使用频率.使用的内存 ...
- windows性能监视器API .
感谢博主http://blog.csdn.net/cosmoslife/article/details/8225845 性能监视器以实时或查看历史数据的方式显示了内置的 Windows 性能计数器.可 ...
- windows 性能监视器图表中各曲线的意义
如果要查看系统的内存占用.CPU占用等性能信息,大家通常会想到Windows的任务管理器,不过在Windows 2000/XP中还有一个功能更为强大的工具,可以查看更为详细的系统性能信息.通过这些数据 ...
最新文章
- Python爬虫框架Scrapy学习笔记
- 智源重大研究方向“智能信息检索与挖掘”发布会(活动报名)
- 组件化开发和模块化开发概念辨析
- bcrypt如何内置盐?
- 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标...
- RHCS套件实现高可用负载均衡集群(三)——共享存储
- 支付宝服务商子商户_支付宝推广数字化经营服务商应该怎么做?
- hdu 3879(最小割模型求解最大权闭合图)
- f5 ppt图标_PPT制作学习 (PPT技巧干货,拿走不谢)
- win7 linux16.04双系统,安装windows7+ubuntu16.04双系统
- mysql 多行拼接注入_MySQL注入汇总
- 机器学习论文泛读总结
- mysql 内存占用_mysql占用内存过多
- 《Installing the XDK and the dev kit OS》
- python or的用法_python and or用法详解
- 学习iOS从object-c开始-语法(一)
- Modelica运算符
- echarts-gl三维展示自定义地图
- IDEA| java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context
- 服务器玩cf显示文件损坏,“CF登陆游戏出现“文件缺损或破坏”的解决方案:”的解决方案...
热门文章
- 九九乘法表编程上三角python_java语言打印上三角和下三角,进一步得到九九乘法表...
- 数据可视化|实验二 分析特征间关系
- html列表小写字母,python实现大小写字母转换
- mysql optimize 作用_mysql optimize table
- UE4学习-4.25版本Possess无法继承、UNavigationSystem命名空间找不到的解决方法
- android studio socket编程实例
- Android无需权限保存文件,即使使用用户权限,也无法在外部存储上保存文件[Android]...
- php正则表达式程序,php正则表达式 Web程序 - 贪吃蛇学院-专业IT技术平台
- python枪战项目计划书_人肉(共享)代购项目计划书(示例代码)
- flash写保护原理_为什么固态会掉盘?著名的30分钟大法修复是什么原理?