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 请看这里: 这并不难,但有点乏味,因为 API 涉及到大量使用自引用、可变长度的结构,并且必须采用一些 IPC 机制来从受监控的进程中获取数据。 不要使用 ATL 性能监视器类。我知道他们很容易添加,他们有一个向导和所有,但他们无可救药地被窃听了。我在工作中将它们添加到我的一个开发应用程序中,然后不得不在 6 个月后检查并撕掉代码。总而言之,大约 3 周的工作都被这种噪音浪费了。 我一直在寻找更容易实现的东西。我可能不得不使用这种方法。一位同事(感谢 PJ)还向我展示了一个 Scribble 教程,该教程已被修改以展示如何使用 ATL 类添加性能计数器: 这里最大的缺点是目前我的应用程序不使用 MFC 或 ATL,我必须添加对它的支持。 |