Héritage
Les profils d’enregistrement WPR (Windows Performance Recorder) sont stockés dans un fichier XML qui a une extension .wprp. WPR prend en charge l’héritage de ses objets à l’aide de l’attribut Base=" » dans le schéma XML du profil WPR. L’héritage vous permet de conserver, réutiliser et créer des définitions de profil courantes pour enregistrer des scénarios spécialisés. Par exemple, vous pouvez ajouter un fournisseur à un profil existant et ainsi modifier les tailles de mémoire tampon sans modifier une définition dans le profil réel.
Important Lorsque vous créez des profils WPRP, vous devez hériter des données de profil des profils de base intégrés de WPR, ou réutiliser les mêmes noms de session pour éviter d’activer le même fournisseur plusieurs fois.
Profils de base
Vous pouvez utiliser des balises XML pour modifier le contenu d’un profil. Vous devez utiliser l’attribut Operation . Les valeurs possibles pour l’attribut Operation sont Set et Add. Dans l’exemple suivant, DerivedProfile ajoute le système ReadyThread mot clé aux mots clés CpuConfig, CSwitch et SampledProfile que BaseProfile définit.
<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>
Note Si vous ne spécifiez pas l’attribut Operation , mais que vous utilisez l’héritage, WPR utilise la valeur par défaut Set.
Exemple
L’exemple suivant définit un profil pour le mode de journalisation des fichiers. La version de mémoire hérite de la version du fichier et remplace uniquement le mode de journalisation.
<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"/>
Meilleures pratiques en matière d’héritage
Un héritage mal conçu peut avoir des conséquences inattendues. Nous vous recommandons de dériver uniquement des collecteurs à partir de collecteurs ou des profils à partir de profils. Vous ne devez jamais combiner des dérivations sur plusieurs types d’objets.
Les trois exemples suivants décrivent deux bonnes façons d’utiliser l’héritage : le troisième exemple décrit une mauvaise utilisation de l’héritage.
Exemple 1 : Bonne utilisation de l’héritage
Vous souhaitez utiliser les spécifications de Event Collector-A, avec quelques modifications. Pour cela :
Définissez un deuxième collecteur (Collector-B) qui hérite de ses spécifications de Collector-A.
Modifiez le collecteur B.
Définissez le profil pour référencer Collector-B.
Il s’agit d’une bonne pratique, car seul l’objet collecteur hérite des attributs d’un autre objet collecteur, qui est alors directement référencé par le profil.
Exemple 2 : Bonne utilisation de l’héritage
Profile-A fait référence au collecteur-A.
Profile-B hérite des attributs de Profile-A.
Vous modifiez des attributs particuliers dans Profile-B.
Il s’agit d’une bonne pratique, car seul l’objet de profil dérive d’un autre objet de profil.
Exemple 3 : Mauvaise utilisation de l’héritage
Profile-A fait référence au collecteur-A.
Le collecteur B hérite de Collector-A.
Profile-B hérite de Profile-A et fait également référence à Collector-B.
Dans ce cas, le profil B fait référence au collecteur B deux fois : une fois via l’héritage par Profile-A, et une fois par référence directe à Collector-B. Dans ce cas, il n’est pas clair comment la définition de Collector-B doit être évaluée; c’est-à-dire quelle dérivation doit être prioritaire. Cet exemple illustre une mauvaise pratique, car l’ordre n’est pas défini et peut entraîner des résultats contradictoires basés sur l’ordre des opérations. Ce type d’héritage doit être évité.