性能计数器的新增功能

本部分介绍为每个版本添加到性能计数器的新功能。

Windows 10 20H1

如果直接从 注册表读取性能数据,现在可以执行仅限元数据的集合,以避免在列出可用性能对象和计数器时不必要的工作。 如果在 MetadataGlobal 查询中使用 而不是 Global ,则所有已启用元数据的提供程序 DLL 都将跳过数据收集步骤,这可能会提高具有多个进程或线程的系统上的查询性能。 未启用元数据的提供程序 DLL 将继续像以前一样工作。

如果使用性能 DLL 提供性能数据,则可以实现对仅元数据收集的支持,以避免不必要的数据收集。 Collect更新函数以仅使用 (使用的PERF_METADATA_NO_INSTANCES元数据响应MetadataGlobalMetadataCostly查询,或PERF_METADATA_MULTIPLE_INSTANCESNumInstances从响应) 省略所有PERF_INSTANCE_DEFINITION块,然后将值为 1 的Performance注册表值REG_DWORD添加到Collect Supports Metadata服务的子项。

Windows 7 和 Windows Server 2008 R2

更改了 CTRPP 工具以改进和简化代码生成。 该工具现在仅生成标头和资源文件。 如果要将旧代码生成行为 (不建议) ,可以使用新的 -legacy 参数。

  • 现在必须指定新的 -o-rc 参数,分别指定标头和资源文件的名称和位置。
  • 可以使用可选的 new -prefix 参数指定要添加到生成的头文件中定义的全局变量和函数的开头的字符串。
  • 如果必须更新计数器清单,则使用新的代码生成无需将以前的回调实现与新生成的代码合并,因为这些回调不再包含在生成的代码中。

symbol 属性可用于以下清单元素:

提供程序symbolcounterSet 需要 属性,对于计数器,属性是可选的。 特性允许你提供一个符号名称,该名称可用于在调用提供程序函数时引用每个元素 (例如,在调用 PerfCreateInstance) 时可以使用计数器集符号名称。

Windows Vista

此版本完全更改了用于提供计数器数据的性能计数器体系结构。

以前,你使用 INI 文件来定义计数器数据,并实现了一个性能 DLL,该 DLL 在使用者的进程中运行,以在使用者请求数据时提供数据。 由于严重的性能和可靠性问题,此体系结构已弃用,不建议用于新代码。

新的体系结构使用清单来定义计数器数据,并在提供程序的进程中运行代码,以在使用者请求数据时提供数据。 有关更多详细信息,请参阅 使用版本 2.0 提供计数器数据

为此版本添加了以下函数:

为此版本添加了以下结构:

有关清单中用于定义计数器的 XML 元素的列表,请参阅 性能计数器架构

有关用于分析清单并生成用作提供程序起点的代码的 CTRPP 预处理器工具的信息,请参阅 CTRPP