J'essaie de résoudre des problèmes de temps de démarrage. Après avoir fait du profilage, j'ai découvert que le principal coupable est ClassProxyGenerator.GenerateCode. Cela prend 400-600ms par type la première fois. Donc, si le point d'entrée de l'application a 8 dépendances (dans une chaîne) qui ont besoin de proxies générés, le temps de démarrage de l'application augmente de 4,8 secondes. Cela peut sembler peu, mais pour un utilisateur, c'est une éternité.
Des conseils pour améliorer cette situation ?
Mise à jour :
Je peux reproduire le temps avec l'application console suivante :
var container = new WindsorContainer();
container.Register(Component.For<Interceptor>()); // dummy IInterceptor...does nothing
container.Register(Component.For<IMyRepository, MyAbstractRepository>().Interceptors<Interceptor>());
var t = DateTime.Now;
var instance = container.Resolve<IMyRepository>();
Debug.WriteLine("Resolved in " + (DateTime.Now - t).TotalMilliseconds);
Les sorties se situent entre 550 ms et 750 ms.
IMyRepository est une interface de dépôt pour 30 types d'entités (générés par un modèle T4). Elle possède 31 IQueryables, 31 surcharges Save et 31 surcharges Delete. MyAbstractRepository est une classe abstraite partielle. Elle déclare les mêmes 3 x 31 méthodes.
Si je supprime toutes les méthodes de sauvegarde et de suppression et que je ne conserve que les 31 IQueryables ET que je n'enregistre pas le référentiel abstrait
container.Register(Component.For<IMyRepository>().Interceptors<Interceptor>());
J'utilise toujours environ 250 ms pour la génération initiale.
Il s'agit d'une machine très (très très) rapide... de sorte que, dans le monde réel, les performances seront probablement inférieures aux chiffres indiqués ci-dessus.