2011-01-21 2 views
4

Microsoft Unity J'examine un projet qui a utilisé l'unité Pratiques et modèles Microsoft Container.Performance du conteneur

Il y a un seul récipient avec 40 types enregistrés, une instance du conteneur est créé pour chaque appel de service Web.

Je me demande:

  • Y at-il un problème de performance en raison de l'enregistrement tant de types?
  • Le conteneur Unity peut-il être partagé entre les appels de service Web?

Les services Web sont hébergés dans IIS.

+1

Quel type d'application vous hébergez vos webservices en? Sur les deux applications Windows et dans les applications Web, vous devriez être en mesure de composer le conteneur sur demande commencer –

+0

@Milkael merci d'avoir mis à jour la question –

Répondre

7

S'il vous plaît créer le conteneur et enregistrer tous les types pendant Application_Start. Nous l'avons fait pour environ 200 types + dans un grand projet (wcf et asp.net mvc) et n'avons eu aucun problème.

Merci

+0

Suis-je comprendre que pour le cas où une nouvelle instance de conteneur est nécessaire pour la demande que nous devons appeler ' CreateChildContainer 'pour l'instance "principale" et utilise celui créé? – Budda

12

Unity met en cache toutes sortes de choses sous le capot la première fois une résolution se fait. Cela améliore considérablement les performances lors des appels de résolution ultérieurs. Si vous créez un nouveau conteneur à chaque requête, vous jetez ces caches.

Conserver le récipient autour entre les demandes.

+0

Cette mise en cache aidera-t-elle également les conteneurs créés avec la méthode 'CreateChildContainer'? – Budda

+2

Les conteneurs enfants effectuent également cette mise en cache avec quelques plis. Si vous utilisez le conteneur enfant pour la gestion de la durée de vie (avec HierarchicalLifetimeManager) mais que vous ne configurez pas les enregistrements dans l'enfant, les informations de cache sont stockées dans le conteneur parent, ce qui permet de rejeter le cache. Si vous configurez des enregistrements dans l'enfant, le cache sera stocké dans l'enfant et disparaîtra lorsque l'enfant sera éliminé/récupéré. –

Questions connexes