1.收集器定义

Windows Performance Recorder (WPR) 目前支持三种收集器:系统收集器、事件收集器和堆事件收集器。 系统收集器定义为与 NT 内核记录器一起工作的 Windows 事件跟踪 (ETW) 系统记录器会话指定了缓冲区大小和其他属性。 事件和堆收集器定义为 ETW 用户会话指定了缓冲区大小和其他属性。

收集器定义顺序受 WPR 架构的限制。 在 .wprp 文件中,系统收集器定义必须位于事件收集器定义之前。 这些定义都必须在堆收集器定义之前(如果存在堆收集器定义)。 WPR 架构是在 WPRControlProfiles 架构中定义的。

收集器属性

收集器具有以下必需属性:

  • Id:表示 .wprp 文件中的收集器定义的唯一字符串标识符。

  • Name:收集器的名称;例如,“WPR 收集器”。 系统收集器名称必须为“NT 内核记录器”。

收集器定义必须包含以下缓冲区大小定义:

  • BufferSize:指定单个缓冲区的大小,以千字节 (KB) 为单位。

  • Buffers:指定缓冲区的数量,或者,如果 PercentageOfTotalMemory 属性设置为“true”,则指定用于缓冲的总内存百分比。

有关缓冲区的详细信息,请参阅日志记录模式

收集器定义示例

以下代码示例显示了系统收集器定义和事件收集器定义。

<SystemCollector
  Id="WPRSystemCollector"
  Name="NT Kernel Logger"
  FileName="WPRKernel.etl">
  <BufferSize
    Value="512"/>
  <Buffers
    Value="3"
    PercentageOfTotalMemory="true"/>
</SystemCollector>

<EventCollector
  Id="WPREventCollector"
  Name="WPR Event Collector"
  FileName="somefilename.etl">
  <BufferSize
    Value="128"/> 
  <Buffers
    Value="64"/>
</EventCollector>

<HeapEventCollector
  Id="Base_Heap_Collector"
  Name="Base Heap Collector"
  FileName="heap.etl">
</HeapEventCollector>

继承示例

Windows Performance Recorder 通过使用 WPR 配置文件 XML 架构中的 Base="" 属性来支持其对象的继承。 这样,便可以逐步建立对象的增加或专门化,同时增加对通用定义的重复使用。

在某些情况下,可能会出现意外的复杂性和副作用;本部分介绍了一些示例和推荐的最佳做法。

示例 1

继承示例

如果配置文件“配置文件 A”想要使用经过一些修改的事件收集器“收集器 A”,它可以定义一个从“收集器 A”(Base="收集器 A")派生的收集器“收集器 A2”,然后引用该收集器“收集器 A2”。 这是建议的做法,因为只有收集器对象派生自另一个收集器对象,并且它被直接引用。

示例 2

继承示例 2

配置文件“配置文件 A”引用收集器“收集器 A”。另一个配置文件“配置文件 B”需要对“配置文件 A”进行更改,使其从它派生,并在其定义中直接指定其更改。 这是建议的做法,因为只有配置文件对象派生自另一个配置文件对象。

示例 3

继承示例 3

配置文件“配置文件 A”引用收集器“收集器 A”。“收集器 A2”派生自“收集器 A”。最后,配置文件“配置文件 B”既派生自“配置文件 A”,也引用已在“配置文件 B”的父配置文件中引用的“收集器 A”。

在这种情况下,应如何评估“收集器 A2”的定义是不明确的。 在一种情况下,配置文件派生优先,而在另一种情况下,收集器派生优先。 这不是建议的做法,因为排序是未定义的,并且可能会根据操作顺序产生不同的结果。

基于这一点,绝不应在多种类型的对象之间组合派生。

创建记录配置文件

2.系统和事件提供程序定义

记录配置文件 XML 参考