Наследование
Профили записи средства записи производительности Windows (WPR) хранятся в XML-файле с расширением WPRP. WPR поддерживает наследование своих объектов с помощью атрибута Base="" в XML-схеме профиля WPR. Наследование позволяет хранить, повторно использовать и использовать общие определения профилей для записи специализированных сценариев. Например, можно добавить поставщика в существующий профиль и тем самым изменить размеры буфера без изменения определения в фактическом профиле.
Важно При создании профилей WPRP следует либо наследовать данные профиля из встроенных базовых профилей WPR, либо повторно использовать одни и те же имена сеансов, чтобы избежать многократного включения одного и того же поставщика.
Базовые профили
Вы можете использовать XML-теги для изменения содержимого профиля. Необходимо использовать атрибут Operation . Возможные значения атрибута Operation : Set и Add. В следующем примере DerivedProfile добавляет системный ключевое слово ReadyThread в ключевые слова CpuConfig, CSwitch и SampledProfile, определяемые BaseProfile.
<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 с некоторыми изменениями. Для этого сделайте следующее:
Определите второй сборщик (Collector-B), который наследует его спецификации от collector-A.
Изменение сборщика B.
Задайте в профиле ссылку На Collector-B.
Это рекомендуется, так как только объект сборщика наследует атрибуты от другого объекта сборщика, на который затем напрямую ссылается профиль.
Пример 2. Правильное использование наследования
Profile-A ссылается на Collector-A.
Profile-B наследует атрибуты от Profile-A.
Вы изменяете определенные атрибуты в Profile-B.
Это рекомендуется, так как только объект профиля является производным от другого объекта профиля.
Пример 3. Плохое использование наследования
Profile-A ссылается на Collector-A.
Collector-B наследуется от Collector-A.
Profile-B наследует от Profile-A, а также ссылается на Collector-B.
В этом случае Profile-B ссылается на Collector-B два раза: один раз через наследование profile-A и один раз по прямой ссылке на Collector-B. В этом случае неясно, как следует оценивать определение для collector-B; то есть, какое производное наследование должно иметь приоритет. В этом примере показана плохая практика, так как порядок не определен и может привести к противоречивым результатам, основанным на упорядочении операций. Такого типа наследования следует избегать.