Perfmon(运行命令perfmon.msc或perfmon即可打开)性能监视器主要用来对指定的系统性能指标进行实时监控。Windows提供Pdh(performance data helper)库,方便通过程序获取里面的性能计数信息。
性能计数器
Windows通过计数器(Counter)提供操作系统、程序、服务以及驱动等的信息,以便对系统进行监视或查找性能瓶颈。
Windows提供了多种方式获取性能计数,下图展示了消费者(获取计数器的程序)、注册表、PDH等之间的互相关联关系:

Pdh接口说明
要使用性能计数器,需要引用对应的库:
#include <Pdh.h>
#include <PdhMsg.h>
#pragma comment(lib,"pdh.lib")
获取计数器一般需要以下步骤:
-
PdhOpenQuery:打开Pdh;
-
PdhAddCounter:添加要关注的计数器(可以添加多个);
-
PdhCollectQueryData:收集计数;因很多计数需要区间值,所以需要调用两次Query(间隔至少1s),然后再获取计数值。
-
PdhGetFormattedCounterValue:获取计数值;
计数器路径
每个计数器由其名称与路径(可在性能监视器中查看到)唯一标识:\\Computer\PerfObject(ParentInstance/ObjectInstance#InstanceIndex)\Counter
其中:
-
Computer:为要监视机器名或IP地址,对本机可忽略; -
PerfObject:为要监视的性能对象名称,可以是CPU、内存、硬盘、程序等等(如Processor Information表示CPU,Network Interface表示网卡); -
ParentInstance,ObjectInstance,InstanceIndex:在要监视的对象有多个实例时,用于区分;注意,因#在此被用于表示实例索引,所以ParentInstance等中若有#则需要替换为_;
获取计数
通过调用Pdh接口,即可获取对应计数信息。
计数器
要获取性能计数,需要得知对应的计数器路径;常见计数器路径都比较好获取,网卡需要获取当期使用网卡的接口描述。
以下示例获取CPU利用率、可用内存大小,以及网卡的收发数据量。
void getResourceCounter()
{
HQUERY query;
PDH_STATUS status = PdhOpenQuery(NULL, NULL, &query);
if (status != ERROR_SUCCESS)
&n

本文详细介绍如何使用Windows性能计数器(Performance Counters)监控系统资源,包括CPU利用率、内存大小及网卡数据流量。文章通过示例代码展示如何通过Pdh库获取这些关键性能指标。
最低0.47元/天 解锁文章
1510

被折叠的 条评论
为什么被折叠?



