Il m'a récemment été demandé de résoudre certains problèmes de performance dans une application créée avec le bloc d'application Composite UI de Microsoft - en particulier que cela prenait trop de temps à charger.Performance de démarrage de l'injection de dépendances
Ceci est construit autour de l'infrastructure d'injection de dépendance ObjectBuilder de Microsoft, qui utilise des attributs de réflexion/attributs pour enregistrer des classes. Le profilage indiquait qu'au démarrage, l'application passait beaucoup de temps à réfléchir, car ObjectBuilder analyse chaque type dans chaque assemblage chargé dans la recherche de choses à enregistrer.
Les autres environnements de DI semblent également utiliser des attributs, une configuration XML ou du code pur.
Il ne semble pas que les autres frameworks basés sur les attributs soient meilleurs, et je suis sceptique quant aux temps de démarrage quand des piles de XML doivent être analysées, etc. Les frameworks basés sur le code pur semblent être beaucoup plus rapides, mais ils sont aussi beaucoup moins flexibles, donc il ne semble pas vraiment y avoir un bon choix ...
Ceci m'a conduit à chercher pour les benchmarks de conteneurs DI, mais le seul que j'ai pu trouver est celui-ci: http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html.
Bien que ce soit un excellent benchmark, il ne mesure que la vitesse à laquelle vous pouvez créer 1 million d'objets en utilisant le conteneur. Je n'ai aucun intérêt à créer 1 million d'objets, je veux juste l'application pour lancer le plus rapidement possible, donc ce que je cherche est des informations sur DI Container démarrage coûts, que ce soit des billets de blog, des anecdotes, ou même quelque chose d'aussi simple que "voici un moyen de rendre ObjectBuilder plus rapide".
Merci à l'avance
convenu, une grande partie du temps est due à JIT de chaque classe. –
Pour autant que je l'ai vu, NGen a un effet négligeable sur la performance de réflexion, qui est la source de ce ralentissement. – Bevan
Je n'ai pas essayé NGEN, mais je ne sais pas si ce serait une bonne idée - l'application en question est une application client ClickOnce déployée, et les choses ne doivent pas aller dans le GAC pour être NGEN'ed ? –