Compartir a través de


Herencia

Los perfiles de grabación de Windows Performance Recorder (WPR) se almacenan en un archivo XML que tiene una extensión .wprp. WPR admite la herencia de sus objetos mediante el atributo Base="" en el esquema XML del perfil de WPR. La herencia permite mantener, reutilizar y crear definiciones de perfil comunes para registrar escenarios especializados. Por ejemplo, puede agregar un proveedor a un perfil existente y, por tanto, cambiar los tamaños de búfer sin modificar una definición en el perfil real.

Importante Al crear perfiles de WPRP, debe heredar los datos de perfil de los perfiles base integrados de WPR o reutilizar los mismos nombres de sesión para evitar habilitar el mismo proveedor varias veces.

Perfiles base

Puede usar etiquetas XML para cambiar el contenido de un perfil. Debe usar el atributo Operation . Los valores posibles para el atributo Operation son Set y Add. En el ejemplo siguiente, DerivedProfile agrega la palabra clave del sistema ReadyThread a las palabras clave CpuConfig, CSwitch y SampledProfile que Define 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 Si no especifica el atributo Operation , pero usa la herencia, WPR usa el valor predeterminado Set.

Ejemplo

En el ejemplo siguiente se define un perfil para el modo de registro de archivos. La versión de memoria hereda de la versión del archivo y sobrescribe solo el modo de registro.

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

Procedimientos recomendados de herencia

La herencia mal diseñada puede crear consecuencias imprevistas. Se recomienda que solo derive recopiladores de recopiladores o perfiles de perfiles. Nunca debe combinar derivaciones en varios tipos de objetos.

En los tres ejemplos siguientes se describen dos buenas maneras de usar la herencia; en el tercer ejemplo se describe un uso deficiente de la herencia.

Ejemplo 1: Buen uso de la herencia

Quiere usar las especificaciones de Event Collector-A, con algunas modificaciones. Para ello:

  1. Defina un segundo recopilador (Collector-B) que herede sus especificaciones de Collector-A.

  2. Modificar recopilador-B.

  3. Establezca el perfil para hacer referencia al recopilador B.

Se trata de un procedimiento recomendado porque solo el objeto recopilador hereda los atributos de otro objeto recopilador, al que el perfil hace referencia directamente.

Ejemplo 2: Buen uso de la herencia

  1. Profile-A hace referencia al recopilador A.

  2. Profile-B hereda atributos de Profile-A.

  3. Los atributos concretos se modifican en profile-B.

Se recomienda porque solo el objeto de perfil deriva de otro objeto de perfil.

Ejemplo 3: Uso deficiente de la herencia

  1. Profile-A hace referencia al recopilador A.

  2. Collector-B hereda de Collector-A.

  3. Profile-B hereda de Profile-A y también hace referencia al recopilador-B.

En este caso, Profile-B hace referencia a Collector-B dos veces: una vez a través de la herencia por Profile-A y una vez por referencia directa al Recopilador-B. En este caso, no está claro cómo se debe evaluar la definición de Collector-B; es decir, qué derivación debe tener prioridad. En este ejemplo se muestra una mala práctica porque la ordenación no está definida y podría dar lugar a resultados erróneos basados en la ordenación de las operaciones. Este tipo de herencia debe evitarse.

Creación de perfiles de grabación

Esquema WPRControlProfiles