Hi Nguyen,

hmm, 1-2 minutes is a long time.
But honestly this method wasn't built for returning thousands of records.

If you just want a list of Strings as in your example, then I would recommend 
using DBDatabase.querySimpleList(String.class, ...);
This one should be more effective.

getGetBeanList() is intended for more complex objects.

Fortunately everything in Empire-db is overridable, so you may want to optimize 
it yourself for your purposes.
Just create your own class derived from DBReader and override
public <C extends Collection<T>, T> C getBeanList(C c, Class<T> t, int maxCount)

Just copy the code and modify it.
I assume that probably the call to findMatchingAccessibleConstructor() is the 
bottleneck.
As you know your objects you can be more efficient.

I hope this suggestion is helpful.

Regards,
Rainer


from: Nguyen, Chieu X [mailto:[email protected]]
to: [email protected]
re: Peformance Issue

Hi Rainer,


I have a SQL that returns 23K records, then, I called the code below to return 
the data in a List.  It consistently took around 1 - 2 minutes to finish the 
getBeanList call.

Is there a way in Empire-DB for me to speed up the performance?

       List<String> dataList = new LinkedList<String>();

       DBReader reader = new DBReader();
       try
       {
           org.apache.commons.lang.time.StopWatch sw = new 
org.apache.commons.lang.time.StopWatch();
           sw.start();

           reader.open(dbCmd, dbConn);
           dataList = reader.getBeanList(String.class);

           sw.stop();
           log.info("getDataFromTable: Getting data from table took " + 
sw.toString() );
       }
       catch (Exception e)
       {
           log.error("getDataFromTable: Error in running SQL " + 
dbCmd.getSelect(), e);
       }
       finally
       {
           reader.close();
       }


Thank you,


Chieu Nguyen

Reply via email to