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
配置文件“配置文件 A”引用收集器“收集器 A”。另一个配置文件“配置文件 B”需要对“配置文件 A”进行更改,使其从它派生,并在其定义中直接指定其更改。 这是建议的做法,因为只有配置文件对象派生自另一个配置文件对象。
示例 3
配置文件“配置文件 A”引用收集器“收集器 A”。“收集器 A2”派生自“收集器 A”。最后,配置文件“配置文件 B”既派生自“配置文件 A”,也引用已在“配置文件 B”的父配置文件中引用的“收集器 A”。
在这种情况下,应如何评估“收集器 A2”的定义是不明确的。 在一种情况下,配置文件派生优先,而在另一种情况下,收集器派生优先。 这不是建议的做法,因为排序是未定义的,并且可能会根据操作顺序产生不同的结果。
基于这一点,绝不应在多种类型的对象之间组合派生。