Usamos o software Ants Profiler Pro da Red Gate em nosso projeto. Funciona muito bem para todos os aplicativos baseados em linguagem .NET.
Descobrimos que o .NET Garbage Collector é muito "seguro" na limpeza de objetos na memória (como deveria ser). Ele manteria os objetos por perto apenas porque poderíamos usá-lo em algum momento no futuro. Isso significava que precisamos ter mais cuidado com o número de objetos que inflamos na memória. No final, convertemos todos os nossos objetos de dados em um "inflar sob demanda" (pouco antes de um campo ser solicitado) para reduzir a sobrecarga de memória e aumentar o desempenho.
Edição: Aqui está uma explicação adicional do que quero dizer com "inflar sob demanda". Em nosso modelo de objeto de nosso banco de dados, usamos Propriedades de um objeto pai para expor o (s) objeto (s) filho (s). Por exemplo, se tivéssemos algum registro que referenciasse outro registro de "detalhes" ou "pesquisa" individualmente, a estrutura seria assim:
class ParentObject
Private mRelatedObject as New CRelatedObject
public Readonly property RelatedObject() as CRelatedObject
get
mRelatedObject.getWithID(RelatedObjectID)
return mRelatedObject
end get
end property
End class
Descobrimos que o sistema acima criou alguns problemas reais de memória e desempenho quando havia muitos registros na memória. Então, mudamos para um sistema em que os objetos eram inflados apenas quando solicitados e as chamadas ao banco de dados eram feitas apenas quando necessário:
class ParentObject
Private mRelatedObject as CRelatedObject
Public ReadOnly Property RelatedObject() as CRelatedObject
Get
If mRelatedObject is Nothing
mRelatedObject = New CRelatedObject
End If
If mRelatedObject.isEmptyObject
mRelatedObject.getWithID(RelatedObjectID)
End If
return mRelatedObject
end get
end Property
end class
Isso se mostrou muito mais eficiente, porque os objetos foram mantidos sem memória até serem necessários (o método Get foi acessado). Ele proporcionou um aumento de desempenho muito grande na limitação de acessos ao banco de dados e um enorme ganho em espaço na memória.