对于韩国人写得jxl的问题
最近用jxl做得模板导出数据出现了严重的性能问题:
(1)在main方法中运行此业务逻辑时间大约1.662秒,打印时间如图:
虚拟机运行情况如图:
(2)在Tomcat中运行此业务逻辑时间大约62.182秒,打印时间如图:
虚拟机运行情况如图:
(3)分析情况
通过数据和图表认真分析,main方法之所以运行快,因为JVM里面没有大量的垃圾回收,占用的内存又不是很大,jxl进行垃圾回收时,占用的消耗时间不大。
在tomcat运行中,可以看到JVM里面程序占用的内存比较大,有垃圾存在,每次进行垃圾回收,都会占用大量的时间。
通过数据分析,main方法的垃圾回收时间很多安基本上忽略不计,而在tomcat里,由于模板总共有47个模板工作表,每个工作表获取数据,要调用3次垃圾回事,每次大约用时0.4秒多,每个工作表用时1.3秒以上,通过计算,大约是60秒以上,可见对整个数据导出占用了大量的时间。
(4)源码分析
代码调用处:
Workbook wb = Workbook.getWorkbook(file);
WritableWorkbook wwb = Workbook.createWorkbook(new File(dstFile),wb);
此程序相当于打开一个文件的副本,进行修改数据,然后回写到源文件
产生慢的原因:
产生一个workbook,读取文件
/**
* A factory method which takes in an excel file and reads in the contents.
*
* @exception IOException
* @exception BiffException
* @param file the excel 97 spreadsheet to parse
* @return a workbook instance
*/
public static Workbook getWorkbook(java.io.File file)
throws IOException, BiffException
{
return getWorkbook(file, new WorkbookSettings());
}
下面这个类的一些参数就是在读取或写入工作簿时用到的(根据一些参数处理)
/**
* This is a bean which client applications may use to set various advanced
* workbook properties. Use of this bean is not mandatory, and its absence
* will merely result in workbooks being read/written using the default
* settings
*/
public final class WorkbookSettings
看一下它的构造器&#