在 Visual C 中创建自定义性能计数器

在 Visual C 中创建自定义性能计数器

Creating Custom Performance Counters in Visual C++

有人知道使用普通非托管 Visual C 创建自定义性能计数器的方法吗?

我知道使用托管 C 可以轻松完成,但我需要使用非托管 Windows 服务。

我也知道您可以检索性能计数器数据,但我需要创建一些自定义计数器并在应用程序运行时递增它们。


在 Vista 及更高版本中更改了对添加 C 性能计数器的支持。另一个答案中建议的性能 DLL 方法仍然有效,但此处描述的新技术更易于使用。

在这种方法中,您编写一个描述计数器的清单,运行 CTRPP,这是一个从您的清单生成代码的工具。编译此代码并将其链接到您的应用程序,并添加调用以初始化进程(它启动后台线程),并添加代码以根据需要更新计数器。发布计数器的细节由运行生成代码的后台线程处理。

您还需要运行 lodctr /m:[manifest file] 来注册您的计数器,然后才能使用它们。这必须以管理员身份运行。

顺便说一句:另一个程序,unlodctr 反转 lodctr 的效果,如果您对计数器进行任何更改必须使用,因为没有"替换"操作,只删除旧的,然后安装新的。

以上所有内容的 RANTDocumentation 简直太糟糕了。例如 lodctr 完全针对 Vista 进行了重新设计,但 MSDN 中的文档都是针对 XP 版本的,不再适用。如果您访问 MSDN,请随意使用"此文档没有帮助"按钮,也许 Microsoft 会收到消息。/RANT


请看这里:
http://msdn.microsoft.com/en-us/library/aa371925.aspx

这并不难,但有点乏味,因为 API 涉及到大量使用自引用、可变长度的结构,并且必须采用一些 IPC 机制来从受监控的进程中获取数据。


不要使用 ATL 性能监视器类。我知道他们很容易添加,他们有一个向导和所有,但他们无可救药地被窃听了。我在工作中将它们添加到我的一个开发应用程序中,然后不得不在 6 个月后检查并撕掉代码。总而言之,大约 3 周的工作都被这种噪音浪费了。


我一直在寻找更容易实现的东西。我可能不得不使用这种方法。一位同事(感谢 PJ)还向我展示了一个 Scribble 教程,该教程已被修改以展示如何使用 ATL 类添加性能计数器:
PerformanceScribble 示例:MFC 应用程序中的性能监控

这里最大的缺点是目前我的应用程序不使用 MFC 或 ATL,我必须添加对它的支持。


推荐阅读