有人知道使用普通非托管 Visual C++ 创建自定义性能计数器的方法吗?
我知道可以使用托管 C++ 轻松完成,但我需要使用非托管 Windows 服务来完成。
我也知道您可以检索性能计数器数据,但我需要创建一些自定义计数器并在应用程序运行时增加它们。
有人知道使用普通非托管 Visual C++ 创建自定义性能计数器的方法吗?
我知道可以使用托管 C++ 轻松完成,但我需要使用非托管 Windows 服务来完成。
我也知道您可以检索性能计数器数据,但我需要创建一些自定义计数器并在应用程序运行时增加它们。
在 Vista 及更高版本中更改了对添加 C++ 性能计数器的支持。另一个答案中建议的性能 DLL 方法仍然有效,但此处描述的新技术更易于使用。
在这种方法中,您编写一个描述您的计数器的清单,运行 CTRPP,这是一个从您的清单生成代码的工具。编译此代码并将其链接到您的应用程序,并添加调用以初始化进程(它启动后台线程),并添加代码以根据需要更新计数器。发布计数器的细节由运行生成代码的后台线程处理。
您还需要运行 lodctr /m:[manifest file] 来注册您的计数器,然后才能使用它们。这必须以管理员身份运行。
顺便说一句:另一个程序 unlodctr 反转 lodctr 的效果,如果您对计数器进行任何更改,则必须使用它,因为没有“替换”操作,只删除旧的,然后安装新的。
<RANT>以上所有内容的文档都非常糟糕。例如 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,我必须添加对它的支持。