Nous avons utilisé le logiciel Ants Profiler Pro by Red Gate dans notre projet. Cela fonctionne très bien pour toutes les applications basées sur le langage .NET.
Nous avons constaté que le garbage collector .NET est très «sûr» dans son nettoyage des objets en mémoire (comme il se doit). Il garderait des objets à portée de main juste parce que nous pourrions l'utiliser dans le futur. Cela signifiait que nous devions être plus prudents sur le nombre d'objets que nous gonflions en mémoire. En fin de compte, nous avons converti tous nos objets de données en un «gonflement à la demande» (juste avant qu'un champ ne soit demandé) afin de réduire la surcharge mémoire et d'augmenter les performances.
EDIT: Voici une explication supplémentaire de ce que j'entends par «gonfler à la demande». Dans notre modèle d'objet de notre base de données, nous utilisons les propriétés d'un objet parent pour exposer le ou les objets enfants. Par exemple, si nous avions un enregistrement qui faisait référence à un autre enregistrement "détaillé" ou "recherche" sur une base individuelle, nous le structurerions comme ceci:
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
Nous avons constaté que le système ci-dessus créait de réels problèmes de mémoire et de performances lorsqu'il y avait beaucoup d'enregistrements en mémoire. Nous sommes donc passés à un système où les objets n'étaient gonflés que lorsqu'ils étaient demandés, et les appels à la base de données n'étaient effectués que lorsque cela était nécessaire:
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
Cela s'est avéré beaucoup plus efficace car les objets étaient conservés hors de la mémoire jusqu'à ce qu'ils soient nécessaires (la méthode Get a été accédée). Il a fourni une très grande amélioration des performances en limitant les accès à la base de données et un énorme gain d'espace mémoire.