29 votes

Pourquoi Castle Windsor conserve-t-il des objets transitoires?

Récemment, j'ai remarqué que ma demande semble être de manger de la mémoire qui n'est jamais publié. Après profilage avec CLRProfiler j'ai trouvé que le Château de Windsor conteneur que j'utilise est tenue sur des objets. Ces objets sont déclarés avec le style de vie="transitoire" de l'attribut dans le fichier de configuration xml.

J'ai trouvé que si je mets un appel explicite à IWindsorContainer.Libération(hangingObject), qu'elle abandonne ses références.

Cela pose un problème, je ne m'attendais pas que, avec une transition de mode de vie de l'objet CastleWindsor permettrait de garder une référence et efficace de créer une fuite. Ça va être un plutôt banale et sujettes à erreur de la tâche en cours autour de l'insertion de Libération explicite des appels dans tous les endroits appropriés.

Avez-vous vu ce problème et avez-vous des suggestions pour comment la contourner?

20voto

Bittercoder Points 4692

Je pense que les réponses sont ici manque un point essentiel - que ce comportement est configurable à la sortie de la boîte via la libération politiques - consultez la documentation sur le château de site du projet ici.

Dans de nombreux scénarios, en particulier lorsque votre conteneur existe pour la durée de vie de l'application d'hébergement, et où transitoire composants n'ont pas vraiment besoin d'être suivis (parce que vous êtes la manipulation disposition dans votre code d'appel ou d'un composant qui a été injecté avec le service), alors vous pouvez simplement définir la politique de diffusion de la NoTrackingReleasePolicy mise en œuvre et être fait avec elle.

Avant le Château de v 1.0 je crois Composant Fardeau sera mise en œuvre/introduction - qui va les aider à atténuer certains de ces problèmes ainsi autour de l'élimination de l'injection de dépendances etc.

Edit:

Découvrez les postes suivants pour plus de discussion de l'élément de charge.

La Composante De La Charge Davy Brions

Également composant de charge est mis en œuvre dans l' officiel de la version 2.0 de l'autoroute de Windsor Conteneur.

2voto

Craig Vermeer Points 1262

Une chose à noter est que cela semble avoir été corrigé dans le coffre du château. Dans la version r5475, Hammett a changé la politique de publication par défaut dans MicroKernel en LifecycledComponentsReleasePolicy.

1voto

Scott Langham Points 17447

Vous pouvez définir un style de vie de singleton ou transitoire sur des objets dans le conteneur. Les objets singleton que je comprends devraient durer toute la vie de l'application, mais je ne comprends pas l'utilité de ce comportement étant le même pour les objets transitoires!

Des styles de vie personnalisés peuvent être créés en implémentant ILifestyleManager. Il est peut-être possible de l'implémenter de manière appropriée pour créer un style de vie ReallyTransient!

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