升级到JXLS 2.2.3后的性能问题

时间:2015-08-14 02:05:26

标签: java apache-poi jxls jexl

我最近升级到新版本的JXLS(从1.0.2开始),发现它造成了重大的性能损失。我的用例是根据模板编写excel报告。以前,这些报告是在4分钟内完成的,但现在要写出来需要60多分钟。我正在使用

JxlsHelper.getInstance().processTemplate(is, os, context);

调用以处理模板(遵循教程here)。我尝试使用变形金刚(poi和jexcel),但都没有给我以前版本的JXLS所做的表现。

想知道升级后是否有其他人有类似的经历或解决了类似的性能问题。

2 个答案:

答案 0 :(得分:1)

一般情况下,jxls-2应该比jxls-1表现更好。 可能你有一些特定的模板,但事实并非如此。 如果您可以共享或创建示例,我们可以调查问题的根本原因。您可以在bitbucket issue tracker创建问题。

除此之外,请检查jxls-demo project中输出许多数据行的以下示例

如果您需要生成数百万条记录,SXSSF转换器是最快的,但它仅适用于简单的模板。

此外,如果模板中有很多公式,请尝试禁用公式处理,看看它是否有帮助。您可以使用 JxlsHelper setProcessFormulas(false)方法执行此操作。

如果没有任何帮助,只需在问题跟踪器中提交问题。

答案 1 :(得分:0)

对于小型电子表格(30,000行),这很棒。

我正在努力使用电子表格在v2.2.5中,所有表格都有超过100万行。我正在使用:setProcessFormulas(false)和expect< 60秒它似乎永远旋转,我没有看到一个完整的。

即使我正在使用InputStream,我也看到很少的cpu使用情况,就像它只在一个线程上运行一样。我已经使用了其他xls编写策略来处理更大的电子表格而没有太多问题,所以它看起来像是内部的。

protected void workbookToStream(Map beanParams, OutputStream os) throws IOException {
      try(InputStream is = new ByteArrayInputStream(templateBytes)) {
         JxlsHelper helper = JxlsHelper.getInstance();
         helper.setProcessFormulas(false);
         helper.processTemplate(is, os, new Context(beanParams));
      }
}