2009-07-03 6 views
1

Lors de l'utilisation d'une bibliothèque IOC comme ninja, y a-t-il un coût lié à la performance ou est-ce un hit unique lors de l'application_start?Quel type de coût de performance y a-t-il avec IOC (asp.net mvc)?

+0

Voulez-vous dire ninject? –

+2

Les ninjas sont sournois et vont câbler vos objets sans que vous vous en rendiez compte. En outre, ils se battent tout le temps. –

Répondre

8

Avez-vous des problèmes de performances? Avez-vous des objectifs spécifiques à atteindre que vous ne rencontrez pas? Avez-vous utilisé un profileur pour tracer les problèmes de performances à votre utilisation d'un framework IoC?

Si la réponse à l'une de ces questions est "non", alors la réponse réelle à votre question est "ce n'est pas grave". Si la réponse à tous est "oui", alors vous connaissez déjà la réponse.

Mais, bien sûr, il y a un coût lié à l'utilisation d'un framework IoC. L'utilisation de new est une instruction, alors qu'un IoC est plus que cela, cela aura donc un coût. Est-ce important pour votre application? Probablement pas. Vous avez l'Internet à une extrémité, probablement une base de données à l'autre, et probablement un réseau interne entre les deux. Le code compilé est rarement le goulot d'étranglement dans les applications Web.

1

Dépend de la façon dont vous l'utilisez, mais à moins d'instancier des milliers d'objets à la fois, il ne devrait pas y avoir de goulot d'étranglement visible. Lorsqu'un objet est résolu à partir d'un conteneur IoC, le conteneur utilise généralement la réflexion pour analyser les constructeurs et les propriétés publiques de cette classe, puis parcourt une collection interne pour trouver la meilleure correspondance pour chaque service requis par cet objet. L'instanciation prendra aussi longtemps que si vous l'instanciez manuellement, plus une petite quantité de temps pour les appels de réflexion. Si vous utilisez un style de vie transitoire et résolvez un objet à l'intérieur d'une boucle, vous POUVEZ remarquer une légère baisse des performances, mais à ce moment-là, je vous demanderais s'il existe une meilleure façon d'exécuter ce code.

Et si vous n'avez pas encore remarqué de baisse de performance, cela ne devrait même pas vous intéresser. Don't optimize until you absolutely have to.

0

Sortie Munq.DI. C'est un CIO simple et très rapide inspiré par Funq. Il utilise des expressions lambda pour définir la méthode de création et prend en charge les gestionnaires de durée de vie Container, Cache, Session, Request et AlwaysNew.

L'exemple d'application inclut l'intégration avec ASP.NET MVC.

Questions connexes