Compartilhar via


Herança

Os perfis de gravação do WPR (Gravador de Desempenho do Windows) são armazenados em um arquivo XML que tem uma extensão .wprp. A WPR dá suporte à herança de seus objetos usando o atributo Base="" no esquema XML do perfil WPR. A herança permite que você mantenha, reutilize e crie definições de perfil comuns para registrar cenários especializados. Por exemplo, você pode adicionar um provedor a um perfil existente e, assim, alterar os tamanhos do buffer sem alterar uma definição no perfil real.

Importante Ao criar perfis WPRP, você deve herdar dados de perfil dos perfis base internos do WPR ou reutilizar os mesmos nomes de sessão para evitar habilitar o mesmo provedor várias vezes.

Perfis base

Você pode usar marcas XML para alterar o conteúdo de um perfil. Você deve usar o atributo Operation . Os valores possíveis para o atributo Operation são Set e Add. No exemplo a seguir, DerivedProfile adiciona as palavra-chave do sistema ReadyThread às palavras-chave CpuConfig, CSwitch e SampledProfile definidas por 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>

Nota Se você não especificar o atributo Operation , mas usar herança, o WPR usará o valor padrão Set.

Exemplo

O exemplo a seguir define um perfil para o modo de registro em log de arquivos. A versão de memória herda da versão do arquivo e substitui apenas o modo de registro em log.

<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"/>

Práticas recomendadas de herança

A herança mal arquitetada pode criar consequências não intencionais. Recomendamos que você apenas derive coletores de coletores ou perfis de perfis. Você nunca deve combinar derivações em vários tipos de objetos.

Os três exemplos a seguir descrevem duas boas maneiras de usar a herança; o terceiro exemplo descreve um uso ruim da herança.

Exemplo 1: bom uso da herança

Você deseja usar as especificações do Coletor de Eventos-A, com algumas modificações. Para fazer isso:

  1. Defina um segundo coletor (Collector-B) que herda suas especificações do Coletor-A.

  2. Modificar Coletor-B.

  3. Defina o perfil para fazer referência ao Coletor-B.

Essa é uma boa prática porque apenas o objeto coletor herda atributos de outro objeto coletor, que é referenciado diretamente pelo perfil.

Exemplo 2: bom uso da herança

  1. Profile-A faz referência ao Coletor-A.

  2. O Profile-B herda atributos do Profile-A.

  3. Você modifica atributos específicos no Profile-B.

Essa é uma boa prática porque apenas o objeto de perfil deriva de outro objeto de perfil.

Exemplo 3: uso insatisfatório da herança

  1. Profile-A faz referência ao Coletor-A.

  2. O Coletor-B herda do Coletor-A.

  3. O Profile-B herda do Perfil A e também faz referência ao Coletor-B.

Nesse caso, o Profile-B faz referência ao Coletor-B duas vezes: uma vez por herança pelo Perfil A e uma vez por referência direta ao Coletor-B. Nesse caso, não está claro como a definição do Coletor-B deve ser avaliada; ou seja, qual derivação deve ter precedência. Este exemplo retrata uma prática incorreta porque a ordenação é indefinida e pode levar a resultados contraditórios com base na ordenação de operações. Esse tipo de herança deve ser evitado.

Criação de perfis de gravação

Esquema WPRControlProfiles