如何读取WindowsPerfmon计数器

how to read windows perfmon counter?

本文关键字:WindowsPerfmon 计数器 读取 何读取      更新时间:2023-10-16

我可以得到一个C++代码来读取Windows Perfmon计数器(类别,计数器名称和实例名称)吗?

这在 c# 中非常简单,但我需要 c++ 代码。

谢谢

正如 Doug T. 之前指出的那样,我不久前发布了一个帮助程序类来查询性能计数器值。该类的用法非常简单,您所要做的就是为性能计数器提供字符串。http://askldjd.wordpress.com/2011/01/05/a-pdh-helper-class-cpdhquery/

但是,我发布在博客上的代码在实践中已被修改。从您的评论来看,您似乎只对查询一个字段感兴趣。

在这种情况下,请尝试将以下函数添加到我的 CPdhQuery 类中。

double CPdhQuery::CollectSingleData()
{
    double data = 0;
    while(true)
    {
        status = PdhCollectQueryData(hQuery);
        if (ERROR_SUCCESS != status)
        {
            throw CException(GetErrorString(status));
        }
        PDH_FMT_COUNTERVALUE cv;
        // Format the performance data record.
        status = PdhGetFormattedCounterValue(hCounter,
            PDH_FMT_DOUBLE,
            (LPDWORD)NULL,
            &cv);
        if (ERROR_SUCCESS != status)
        {
            continue;
        }
        data = cv.doubleValue;
        break;
    }
    return data;
}

例如获取处理器时间

counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\Processor Information(_Total)% Processor Time")));

要获取文件读取字节/秒:

counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\System\File Read Bytes/sec")));

要获取提交的字节百分比,请执行以下操作:

counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\Memory\% Committed Bytes In Use")));

若要获取数据,请执行此操作。

double data = counter->CollectSingleData();

我希望这有所帮助。

。艾伦

一些常用的性能值具有 API 调用来直接获取它们。 例如,可以从 GetSystemTimes 获取总处理器时间,您可以自己计算百分比。

如果这不是一个选项,则性能数据帮助程序库为性能数据提供了一个中等简单的接口。