Guice.createInjector() is slow, is it possible to avoid calling it in a 
loop?  E.g. by creating the injector once outside the loop and only calling 
.getInstance() inside the loop?

On Tuesday, 27 March 2018 04:51:00 UTC-4, [email protected] wrote:
>
> I have a strange performance behavior with google guice in my project
>
> My company have a project that use google guice and groovy.
> I have to admin: I do not know well google guice (it's been chosen from 
> other than me)
>
> i have this case, it's not easy to explain, let's try
>
> I have this classes
>
> a groovy class with this method (Class A)
>
>  public Integer resMesiFatturazionePerAnno(Integer anno) {
>        [some code]
>         def bollelett = getListByQuery(BollaLetture, """select bl.* from 
> bolla_letture bl, bolla b, fat where
>                                                         
> b.id_centro_subentro = ? and
>                                                         b.id_fat = fat.id 
> and
>                                                         fat.dt>=? and 
> fat.dt<= ? and
>                                                         bl.id_bolla = b.id
>                                                         ORDER by bl.dt asc
>                                                         """, 
> getCentroSubentroId(), inizioAnno, fineAnno)
>        [some code]
>     }
>
>
> other groovy class with this method (CLASS B)
>
> public <T extends BOIf> List<T> getListByQuery(Class<T> c, String query, 
> Object... list) throws java.lang.Exception {
>         [some code]
>         for (Map h : this.queryToMapList(query, list)) {
>             long test1 = System.currentTimeMillis();            
>             T bo = Guice.createInjector(new BillModule(), new 
> CacheModule()).getInstance(c);
>              System.out.println("ciclomap: "  + 
> (System.currentTimeMillis() - test1));
>             [some code]       
>          }
>         System.out.println("getListByQuery: " + 
> (System.currentTimeMillis()-test));
>         return l;
>     } 
>
> if you see, the resMesiFatturazionePerAnno method use the getListByQuery 
> method, and getListByQuery have Guice createInjector inside
> resMesiFatturazionePerAnno is invoked from codes inside a batch script, so 
> invoken 20/30.000 times over different instance of CLASS A
>
> depends from where i invoke resMesiFatturazionePerAnno in some case i can 
> see that this lines
>
> long test1 = System.currentTimeMillis();            
> T bo = Guice.createInjector(new BillModule(), new 
> CacheModule()).getInstance(c);
> System.out.println("ciclomap: "  + (System.currentTimeMillis() - test1));
>
> take 10 milliseconds to executes, but if invoked from other circumstance 
> it take 20ms to executes  (in my case 10ms more for EVERY time the 
> getListByQuery it's called it's really big damage)
>
> Can someone help me to find out why this behaviour?
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-guice.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-guice/04f171ec-9277-493e-87e0-7e533ad12f33%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to