La business logic è spesso scritta in modo da conservare una mappa della struttura della risorsa di metrica per l'uso durante i calcoli. Poiché la struttura della risorsa cambia nel tempo, la business logic deve aggiornare la struttura nella mappa quando la struttura della risorsa cambia.
Il metodo OnRegistration viene chiamato quando la struttura della risorsa subisce modifiche, poiché è responsabile della gestione del comportamento del motore associato alle modifiche nelle registrazioni e nel raggruppamento dovute a modifiche alla struttura della risorsa. Il fatto che questo metodo viene chiamato per ogni modifica della struttura della risorsa lo rende un passaggio comodo per aggiornare la mappa precedentemente citata. Tuttavia, la compilazione della mappa non è pertinente al processo di registrazione. Questo significa che la compilazione della mappa riduce le prestazioni della funzione OnRegistration. Non è importante durante il runtime, perché non si verifica di frequente. Tuttavia, il metodo OnRegistration è invocato anche nel processo di elaborazione dell'infrastruttura da parte del motore, durante il quale il sistema calcola se le modifiche alla struttura della risorsa sono pertinenti alla registrazione di ciascuna metrica specifica di cui l'istanza è responsabile. Durante questo processo, il metodo OnRegistration viene invocato per ogni modifica nella struttura della risorsa, anche se la modifica alla struttura non è pertinente alla metrica corrente. Ciò significa che il metodo può essere invocato varie volte per metrica.
Se questa logica viene implementata nel metodo OnRegistration, una lieve riduzione delle prestazioni in fase di runtime potrebbe diventare una riduzione delle prestazioni molto significativa durante l'elaborazione dell'infrastruttura.
Per risolvere questo problema, la compilazione delle mappe o di qualsiasi altro processo di inizializzazione che deve essere eseguito quando si verifica una modifica nella struttura della risorsa, ma non pertinente alla registrazione, può essere effettuata in due modi:
Utilizzando la proprietà IsRunTimeMode dell'oggetto dispatcher.
Questa proprietà consente all'utente di determinare se l'esecuzione corrente è un calcolo eseguito o meno, nonché di racchiudere la logica non pertinente alla registrazione in un'istruzione if che garantisce l'esecuzione solo durante il runtime.
Nell'esempio riportato di seguito, la parte contrassegnata in blu è la parte della business logic pertinente alla registrazione e deve essere sempre eseguita. La parte contrassegnata in verde non è pertinente alla registrazione e può essere racchiusa nella nuova istruzione 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)
Per ogni risorsa in ThisResourceMap
Risorsa GlobalResourceVector.Add
Avanti
End Sub
È possibile migliorare questo codice modificandolo nel modo seguente:
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)
Per ogni risorsa in ThisResourceMap
Risorsa GlobalResourceVector.Add
Avanti
End If
End Sub
Utilizzo del metodo OnResourceStructureChanged.
Questo metodo viene eseguito subito dopo il metodo OnRegistration e fornisce la stessa funzionalità del metodo originale, ma viene eseguito solo durante il runtime. Questo metodo non è invocato durante l'elaborazione dell'infrastruttura e, pertanto, le prestazioni non sono compromesse.
Nell'esempio riportato di seguito, la parte contrassegnata in blu è la parte della business logic pertinente alla registrazione e deve restare nel metodo OnRegistration. La parte contrassegnata in verde non è pertinente alla registrazione e può essere inserita nella nuova funzione.
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)
Per ogni risorsa in ThisResourceMap
Risorsa GlobalResourceVector.Add
Avanti
End Sub
È possibile migliorare questo codice modificandolo nel modo seguente:
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)
Per ogni risorsa in ThisResourceMap
Risorsa GlobalResourceVector.Add
Avanti
End Sub
|
Copyright © 2013 CA.
Tutti i diritti riservati.
|
|