继承
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 的规范,并进行一些修改。 为此,请执行以下操作:
定义从收集器 A 继承其规范的第二个收集器(收集器 B)。
修改收集器 B。
将配置文件设置为引用收集器 B。
这是一种很好的做法,因为只有收集器对象从另一个收集器对象继承属性,然后由配置文件直接引用。
示例 2:正确使用继承
配置文件 A 引用收集器 A。
配置文件 B 从配置文件 A 继承属性。
修改配置文件 B 中的特定属性。
这是一种很好的做法,因为只有配置文件对象派生自另一个配置文件对象。
示例 3:不当使用继承
配置文件 A 引用收集器 A。
收集器 B 继承自收集器 A。
配置文件 B 继承自配置文件 A 并引用收集器 B。
在本例中,配置文件 B 引用收集器 B 两次:一次通过配置文件 A 的继承,另一次通过直接引用收集器 B。 在本例中,不清楚应如何评估收集器 B 的定义;也就是说,不清楚应优先使用哪个派生。 该示例描述了一种不好的做法,因为顺序是不确定的,可能会产生基于操作顺序的矛盾结果。 应避免这种类型的继承。