[.net] Rendement de démarrage de l'injection de dépendance



0 Answers

En le rendant plus vite ...

Je pense qu'il y a probablement un moyen de mettre en cache le résultat du démarrage. Peut-être que l'application passe un peu plus de temps à faire la réflexion puis à mettre en cache le résultat, mais lors de votre deuxième démarrage, si rien n'a changé, vous pouvez charger à partir du cache (ce qui pourrait être plus rapide).

En ce qui concerne la nature de ce cache, il se peut que les objets soient sérialisés sur le disque. Comme la question "rien n'a changé", le démarrage pourrait regarder des sommes de contrôle.

Question

Il m'a récemment été demandé de résoudre certains problèmes de performance dans une application construite avec le bloc d'application Composite UI de Microsoft - en particulier que cela prenait trop de temps à charger.

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 frameworks DI alternatifs semblent tous utiliser également 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 devoir être beaucoup plus rapides, mais ils sont aussi beaucoup moins flexibles, donc il ne semble pas vraiment qu'il y ait un bon choix clair ...

Cela m'a conduit à rechercher des repères 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 bon 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 que l'application démarre aussi vite que possible, donc je cherche des informations sur les coûts de démarrage de DI Container, que ce soit des billets de blog, des anecdotes ou même quelque chose comme simple comme "voici un moyen de rendre ObjectBuilder plus rapide".

Merci d'avance




Related