A lógica de negócios é muitas vezes criada de modo a manter um mapeamento da estrutura do recurso da métrica para uso em cálculos. Considerando que a estrutura do recurso muda com o tempo, tal lógica de negócios precisa atualizar a estrutura no mapeamento mediante alterações na estrutura do recurso.
O método OnRegistration é chamado quando a estrutura do recurso é alterada, uma vez que é responsável por gerenciar o comportamento do mecanismo associado às alterações nos registros e agrupamentos decorrentes de mudanças na estrutura do recurso. O fato de esse método ser chamado a cada alteração na estrutura do recurso o torna conveniente para atualizar o mapeamento mencionado acima. No entanto, a criação do mapeamento não é relevante para o processo de registro. Isso significa que criar o mapeamento prejudica o desempenho da função OnRegistration. Isso não é importante durante o tempo de execução, uma vez que não acontece com muita frequência. Contudo, o método OnRegistration também é chamado durante o processamento da infraestrutura pelo mecanismo. Enquanto isso, o sistema identifica se as alterações na estrutura do recurso são relevantes para o registro de cada métrica específica pela qual a instância é responsável. Durante esse processo, o método OnRegistration é chamado a cada alteração na estrutura do recurso, mesmo se ela não for relevante à métrica atual. Isso significa que o método pode ser chamado muitas vezes por métrica.
Se essa lógica for implementada no método OnRegistration, uma pequena redução no desempenho em tempo de execução pode se tornar algo significativo durante o processamento da infraestrutura.
Para resolver esse problema, a criação de mapeamentos ou qualquer outra inicialização que precise ser executada quando uma alteração na estrutura do recurso ocorrer, mas não for relevante ao registro, pode ser feita de duas maneiras:
Usando a propriedade IsRunTimeMode no objeto de dispatcher.
Ela permite ao usuário identificar se a execução atual é ou não de cálculo e embutir a lógica que não for relevante ao registro em uma instrução IF, garantindo, assim, que a execução ocorra apenas em tempo de execução.
No exemplo abaixo, o que está marcado em azul é a parte da lógica de negócios relevante ao registro e que precisa estar sempre em execução. O que está marcado em verde não é relevante ao registro e pode ser embutido na nova instrução 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)
Para cada recurso em ThisResourceMap
GlobalResourceVector.Add resource
Próximo
End Sub
Esse código pode ser aprimorado da seguinte maneira:
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)
Para cada recurso em ThisResourceMap
GlobalResourceVector.Add resource
Próximo
End If
End Sub
Usando o método OnResourceStructureChanged.
Este método é executado logo após OnRegistration e, portanto, oferece a mesma funcionalidade que a metodologia original. Contudo, é executado apenas em tempo de execução. Esse método não é chamado durante o processamento da infraestrutura e, assim, o desempenho não é afetado.
No exemplo abaixo, o que está marcado em azul é a parte da lógica de negócios relevante ao registro e que precisa permanecer no método OnRegistration. O que está marcado em verde não é relevante ao registro e pode ser colocado na nova função.
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)
Para cada recurso em ThisResourceMap
GlobalResourceVector.Add resource
Próximo
End Sub
Esse código pode ser aprimorado da seguinte maneira:
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)
Para cada recurso em ThisResourceMap
GlobalResourceVector.Add resource
Próximo
End Sub
| Copyright © 2012 CA. Todos os direitos reservados. | Enviar email à CA Technologies sobre este tópico |