Ok, je sais que mes calculs ne sont pas objectifs et ainsi de suite, mais de toute façon, je déteste attendre beaucoup de temps lors de l'exécution de mes tests unitaires:Comment améliorer les performances Guice au démarrage
Mon Guice application Swing faut compter environ 7 secondes pour initialiser. C'est un simple client IRC. À ce moment, aucune connexion n'est ouverte, je n'ai même pas encore appelé de classes java.io ou java.net. J'ai essayé d'affiner ce qui ne va pas et j'obtiens que 5,6 secondes (en moyenne) sont utilisées par Guice pour créer l'injecteur avec les 2 modules que j'utilise (un module normal et un construit avec FactoryModuleBuilder
, installé dans le module d'origine).
Lorsque je supprime tous les modules (donc appel uniquement et exactement Guice.createInjector()
), cela prend encore 3,5 secondes.
La version de Guice que j'utilise est la 3.0 rc2. Mon ordinateur n'est certainement pas le dernier, mais il n'est pas encore plus vieux que 3 ans. Alors, comment puis-je améliorer les performances de Guice, si possible?
Pour référence, voici la méthode principale que j'utilise, provoquant les 3,5 secondes. Les appels suivants prennent 0,01 secondes
public static void main(String[] args) {
long t = System.currentTimeMillis();
Injector injector = Guice.createInjector();
long t1 = System.currentTimeMillis();
System.out.println(((t1 - t))/1000.0);
}
Et le résultat
3.578
Il doit y avoir un problème avec votre ordinateur ou avec le RC. La mienne a 2 ans, j'utilise Guice 2, et vide 'Guice.createInjector()' prend 0.140 s lors de la première invocation. Guice est assez rapide, mais dans les tests unitaires, il est recommandé de ne pas utiliser DI, puisque vous pouvez le câbler manuellement la plupart du temps. – maaartinus
Pour l'enregistrement, vous devriez utiliser 'System.nanoTime()' plutôt que 'System.currentTimeMillis()' pour chronométrer les choses. 'System.currentTimeMillis()' est "horloge murale" ... le Javadoc pour ces méthodes explique un peu plus. Cela n'affectera certainement pas le moment ici de manière significative. – ColinD
Eh bien, au début, mes tests étaient avec nanoTime(). Mais quand j'ai vu le long temps de chargement, j'ai pensé que cela pourrait être lié à cette méthode, donc je suis revenu au (bon vieux) currentTimeMillis(). Puisque les résultats sont les mêmes avec les deux méthodes, je ne me suis pas soucié de le changer en nanoTime(). –