La logique applicative est souvent écrite de façon à conserver un plan de la structure de ressource de la métrique à utiliser pendant les calculs. Puisque la structure de la ressource change avec le temps, cette logique applicative doit mettre à jour la structure du plan lorsque la structure de ressource change.
La méthode OnRegistration est appelée lorsque la structure de ressource change, puisqu'elle est chargée de gérer le comportement de moteur qui a un lien avec les changements observés dans les enregistrements et le groupement en raison des changements de structure de ressource. Le fait que cette méthode est appelée pour chaque changement de structure de ressource constitue un atout pour mettre à jour le plan mentionné ci-dessus. Toutefois, le remplissage du plan n'est pas utile à l'enregistrement. Cela signifie que le remplissage du plan compromet la performance de la fonction OnRegistration. Ce n'est pas important pendant le temps d'exécution, puisqu'il ne se produit pas très souvent. Toutefois, la méthode OnRegistration est également appelée pendant le processus de traitement de l'infrastructure du moteur, pendant lequel le système définit si les changements de structure de ressource sont utiles à l'enregistrement de chaque métrique spécifique dont l'instance est responsable. Pendant ce processus, la méthode OnRegistration est appelée pour tous les changements de la structure de ressource, même si le changement de structure n'est pas utile à la métrique actuelle. Cela signifie que la méthode peut être appelée un grand nombre de fois par métrique.
Si cette logique est implémentée dans la méthode OnRegistration, une petite dégradation de performance pendant le temps d'exécution pourrait devenir une dégradation de performance très importante pendant le traitement de l'infrastructure.
Pour résoudre ce problème, il existe deux manières de remplir des plans ou toute autre initialisation qui doit être exécutée lorsqu'il y a changement de la structure de ressource, non utile à l'enregistrement :
Utilisation de la propriété IsRunTimeMode dans l'objet distributeur.
Cette propriété permet à l'utilisateur de déterminer si l'exécution actuelle est une exécution de calcul ou non, et d'enfermer la logique qui n'est pas utile à l'enregistrement dans un énoncé "if" qui veillera à ce que la logique s'exécute uniquement pendant le temps d'exécution.
Dans l'exemple ci-dessous, la partie marquée en bleu est la partie de la logique applicative utile à l'enregistrement et qui doit toujours être exécutée. La partie marquée en vert n'est pas utile à l'enregistrement et peut être encadrée dans le nouvel énoncé "if".
Sub OnRegistration (dispatcher)
Dim MyResource
MyResource = Context.ClusterItem
Dispatcher.RegisterByResource “OnEvent”, “My Event Type”, MyResource
Dim ThisResourceMap
Set GlobalResourceVector= CreateObject("SlalomVector.Vector")
Dim resource
Set ThisResourceMap = Context.ResourcesOfResourceGroup(Context.ClusterItem)
For Each resource In ThisResourceMap
GlobalResourceVector.Add resource
Next
End sub
Vous pouvez améliorer ce code en le modifiant de la façon suivante :
Sub OnRegistration (dispatcher)
Dim MyResource
MyResource = Context.ClusterItem
Dispatcher.RegisterByResource “OnEvent”, “My Event Type”, MyResource
If Dispatcher.IsRunTimeMode Then
Dim ThisResourceMap
Set GlobalResourceVector= CreateObject("SlalomVector.Vector")
Dim resource
ThisResourceMap = Context.ResourcesOfResourceGroup(Context.ClusterItem)
For Each resource In ThisResourceMap
GlobalResourceVector.Add resource
Next
End If
End sub
Utiliser la méthode OnResourceStructureChanged.
Cette méthode s'exécute juste après la méthode OnRegistration et produit donc la même fonctionnalité que la méthodologie d'origine, mais elle s'exécute uniquement pendant le temps d'exécution. Cette méthode n'est pas appelée pendant le traitement d'infrastructure et la performance n'est donc pas endommagée.
Dans l'exemple ci-dessous, la partie marquée en bleu est la partie de la logique applicative utile à l'enregistrement et qui doit toujours être exécutée. La partie marquée en vert n'est pas utile à l'enregistrement et peut être placée dans la nouvelle fonction.
Sub OnRegistration (dispatcher)
Dim MyResource
MyResource = Context.ClusterItem
Dispatcher.RegisterByResource “OnEvent”, “My Event Type”, MyResource
Dim ThisResourceMap
Set GlobalResourceVector= CreateObject("SlalomVector.Vector")
Dim resource
Set ThisResourceMap = Context.ResourcesOfResourceGroup(Context.ClusterItem)
For Each resource In ThisResourceMap
GlobalResourceVector.Add resource
Next
End sub
Vous pouvez améliorer ce code en le modifiant de la façon suivante :
Sub OnRegistration (dispatcher)
Dim MyResource
MyResource = Context.ClusterItem
Dispatcher.RegisterByResource “OnEvent”, “My Event Type”, MyResource
End sub
Sub OnResourceStructureChanged(time)
Dim ThisResourceMap
Set GlobalResourceVector= CreateObject("SlalomVector.Vector")
Dim resource
Set ThisResourceMap = Context.ResourcesOfResourceGroup(Context.ClusterItem)
For Each resource In ThisResourceMap
GlobalResourceVector.Add resource
Next
End sub
|
Copyright © 2013 CA.
Tous droits réservés.
|
|