Поделиться через


Наследование

Профили записи средства записи производительности 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 с некоторыми изменениями. Для этого сделайте следующее:

  1. Определите второй сборщик (Collector-B), который наследует его спецификации от collector-A.

  2. Изменение сборщика B.

  3. Задайте в профиле ссылку На Collector-B.

Это рекомендуется, так как только объект сборщика наследует атрибуты от другого объекта сборщика, на который затем напрямую ссылается профиль.

Пример 2. Правильное использование наследования

  1. Profile-A ссылается на Collector-A.

  2. Profile-B наследует атрибуты от Profile-A.

  3. Вы изменяете определенные атрибуты в Profile-B.

Это рекомендуется, так как только объект профиля является производным от другого объекта профиля.

Пример 3. Плохое использование наследования

  1. Profile-A ссылается на Collector-A.

  2. Collector-B наследуется от Collector-A.

  3. Profile-B наследует от Profile-A, а также ссылается на Collector-B.

В этом случае Profile-B ссылается на Collector-B два раза: один раз через наследование profile-A и один раз по прямой ссылке на Collector-B. В этом случае неясно, как следует оценивать определение для collector-B; то есть, какое производное наследование должно иметь приоритет. В этом примере показана плохая практика, так как порядок не определен и может привести к противоречивым результатам, основанным на упорядочении операций. Такого типа наследования следует избегать.

Создание профилей записи

Схема WPRControlProfiles