Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 升级到JXLS 2.2.3后的性能问题_Java_Apache Poi_Jxls_Jexl - Fatal编程技术网

Java 升级到JXLS 2.2.3后的性能问题

Java 升级到JXLS 2.2.3后的性能问题,java,apache-poi,jxls,jexl,Java,Apache Poi,Jxls,Jexl,我最近升级到JXLS的新版本(从1.0.2开始),发现它对性能造成了重大影响。我的用例是基于模板编写excel报告。以前,报告只需4分钟就可以写完,但现在需要60多分钟才能写完。我正在使用 JxlsHelper.getInstance().processTemplate(is, os, context); 调用以处理模板(遵循教程)。我尝试使用这两种转换器(poi和JEXEL),但它们都没有给我以前版本的JXLS带来的性能 想知道是否有其他人有过类似的经验或在升级后解决了类似的性能问题。一般情

我最近升级到JXLS的新版本(从1.0.2开始),发现它对性能造成了重大影响。我的用例是基于模板编写excel报告。以前,报告只需4分钟就可以写完,但现在需要60多分钟才能写完。我正在使用

JxlsHelper.getInstance().processTemplate(is, os, context);
调用以处理模板(遵循教程)。我尝试使用这两种转换器(poi和JEXEL),但它们都没有给我以前版本的JXLS带来的性能


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

一般情况下,jxls-2应该比jxls-1性能更好。 可能您有一些不正确的特定模板。 如果您可以分享或创建一个示例,我们可以调查问题的根本原因。您可以在上创建问题

除此之外,请检查以下示例,其中输出了许多数据行

  • -在大约6秒钟内产生30000名员工
  • -使用
如果您需要生成数百万条记录,那么SXSSF transformer是最快的,但它只适用于简单的模板

另外,如果模板中有很多公式,请尝试禁用公式处理,看看是否有帮助。您可以使用JxlsHelper的
setProcessFormulas(false)
方法来完成

如果没有任何帮助,只需在issue tracker中归档一个问题。

对于小型电子表格(30000行),这很好

我正在努力使用v2.2.5,在所有工作表中都有超过100万行的电子表格。我正在使用:setProcessFormulas(false)并期望<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));
      }
}

实际上,我们每次运行都会生成100个报告,使用的模板并不复杂,只是3-4个选项卡和其中的一些jx:each命令。我现在已经恢复到jxls的前一个版本,稍后我会回来看看新版本。这是一个非常简单的电子表格,没有公式,但有很多行。我运行了500000行的StressXlsxDemo,它在大约2分钟内完成,效果很好。但是这个演示只有几个列,所以总体处理大小没有那么大(~21Mb结果文件)。不过,应该定义足够的堆大小(本例需要4Gb)。总的来说,对于这样大的大小,应该使用SXSSF transformer来减少内存需求