继承

Windows Performance Recorder (WPR) 记录配置文件存储在扩展名为 .wprp 的 XML 文件中。 WPR 使用 WPR 配置文件 XML 架构中的 Base="" 属性来支持其对象的继承。 通过继承,可以保留和重用通用配置文件定义并将其作为构建基础,以记录专用方案。 例如,可以将提供程序添加到现有配置文件,从而在不更改实际配置文件中的定义的情况下更改缓冲区大小。

重要提示 创作 WPRP 配置文件时,应从 WPR 的内置基本配置文件继承配置文件数据,或者重用相同的会话名称,以避免多次启用同一个提供程序。

基本配置文件

你可以使用 XML 标记来更改配置文件的内容。 必须使用 Operation 属性。 Operation 属性的可能值为 Set 和 Add。 在以下示例中,DerivedProfile 将 ReadyThread 系统关键字添加到 BaseProfile 定义的 CpuConfig、CSwitch 和 SampledProfile 关键字。

<SystemCollector
  Id="BaseSystemCollector" ... />

<SystemProvider
  Id="MainSystemProvider">
  <Keywords>
    <Keyword
      Value="CpuConfig"/>
    <Keyword
      Value="CSwitch"/>
    <Keyword
      Value="SampledProfile"/>
  </Keywords>
</SystemProvider>

<SystemProvider
  Id="AnotherSystemProvider">
  <Keywords> 
    <Keyword
      Value="ReadyThread"/>
  </Keywords>
</SystemProvider>

<Profile
  Id="BaseProfile"...>
  ... 
  <Collectors>
    <SystemCollectorId
      Value="BaseSystemCollector">
      <SystemProviderId
        Value="MainSystemProvider"/>
    </SystemCollectorId>
  </Collectors>
</Profile>

<Profile
  Id="DerivedProfile"
  Base="BaseProfile"...>
... 
  <Collectors Operation="Add"> <!--Use "Add" operation to add new provider to an existing one. -->
    <SystemCollectorId
      Value="BaseSystemCollector">
      <SystemProviderId
        Value="AnotherSystemProvider"/> <!--Specify provider to add. --> 
    </SystemCollectorId> 
  </Collectors>
</Profile>

注意 如果未指定 Operation 属性但使用继承,WPR 将使用默认值 Set。

示例

以下示例定义了文件日志记录模式的配置文件。 内存版本继承自文件版本,仅覆盖日志记录模式。

<Profile
   Id="SampleProfile.Verbose.File"
   LoggingMode = "File"
   DetailLevel = "Verbose"
   Name = "SampleProfile"
   Description = "A sample profile">
   …

</Profile>

<Profile
   Id="SampleProfile.Verbose.Memory"
   Base="SampleProfile.Verbose.File”
   LoggingMode = "Memory"
   DetailLevel = "Verbose"
   Name = "SampleProfile"
   Description = "A sample profile"/>

继承最佳做法

架构不良的继承会产生意想不到的后果。 建议你仅从收集器派生收集器,或者仅从配置文件派生配置文件。 绝不能跨多种类型的对象合并派生。

以下三个示例描述了两种使用继承的好方法;第三个示例描述了对继承的不当使用。

示例 1:正确使用继承

你想使用事件收集器 A 的规范,并进行一些修改。 为此,请执行以下操作:

  1. 定义从收集器 A 继承其规范的第二个收集器(收集器 B)。

  2. 修改收集器 B。

  3. 将配置文件设置为引用收集器 B。

这是一种很好的做法,因为只有收集器对象从另一个收集器对象继承属性,然后由配置文件直接引用。

示例 2:正确使用继承

  1. 配置文件 A 引用收集器 A。

  2. 配置文件 B 从配置文件 A 继承属性。

  3. 修改配置文件 B 中的特定属性。

这是一种很好的做法,因为只有配置文件对象派生自另一个配置文件对象。

示例 3:不当使用继承

  1. 配置文件 A 引用收集器 A。

  2. 收集器 B 继承自收集器 A。

  3. 配置文件 B 继承自配置文件 A 并引用收集器 B。

在本例中,配置文件 B 引用收集器 B 两次:一次通过配置文件 A 的继承,另一次通过直接引用收集器 B。 在本例中,不清楚应如何评估收集器 B 的定义;也就是说,不清楚应优先使用哪个派生。 该示例描述了一种不好的做法,因为顺序是不确定的,可能会产生基于操作顺序的矛盾结果。 应避免这种类型的继承。

创建记录配置文件

WPRControlProfiles 架构