2 votes

Fuites de mémoire du conteneur Unity

Salut, je travaille sur un projet qui utilise le conteneur Unity des bibliothèques Enterprise pour résoudre les dépendances en matière de gestion des exceptions, de cache, de journalisation et d'accès à la base de données, mais nous continuons à avoir beaucoup d'objets non libérés en mémoire.

Nous utilisons une injection de propriété comme ceci :

[Dependency]
public Database DB
{
  get { return db; }
  set { db = value; }
}
[Dependency]
public ExceptionManager ExceptionMgr
{
  get { return exceptionManager; }
  set { exceptionManager = value; }
}

Certains des objets qui fuient :

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSetti Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionPolicyData
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ReplaceHandlerData
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.WrapHandlerData Microsoft.Practices.EnterpriseLibrary.Common.Configuration.GenericEnumeratorWrapper Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerData Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings
Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheStorageData

Toute recommandation générale sur la gestion des dépendances avec Unity pour éviter les fuites d'objets ?

1voto

Chris Tavares Points 8818

Tous les objets que vous énumérez font partie du système de configuration. Comment initialisez-vous votre conteneur? Il suffit d'appeler "AddNewExtension()?" Si c'est le cas, ce n'est pas vraiment une fuite, car ces objets représentent la configuration que vous avez chargée. La source de configuration (qui détient ces objets) reste active pendant toute la durée de l'application afin de surveiller et de vous avertir des changements dans votre application.

Quels outils utilisez-vous pour vous dire qu'ils fuient? Et les fuites augmentent-elles ou sont-elles constantes? Certains détails aideraient à déterminer si le comportement va de "prévu" à "oups, un bug réel".

De plus, il s'agit plus d'une question sur Enterprise Library que sur Unity - Unity lui-même ne présente pas de fuites, à ma connaissance.

-3voto

Edgar Sánchez Points 936

Disposez-vous correctement de l'instance de la base de données? Par exemple (en utilisant db = new Database()) { .... }?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X