当前位置:  开发笔记 > 编程语言 > 正文

POI表现

如何解决《POI表现》经验,为你挑选了2个好方法。

我在J2EE Web应用程序中使用POI来生成工作簿.但是,我发现POI大约需要3分钟来创建一个25K行的工作簿(每行大约15列).这是POI性能问题,还是花费大量时间是合理的?是否有其他API可以提高性能?



1> Eric Nicolas..:

如果您使用"流式"POI API而不是标准API,则可以大大减少使用POI编写大型文件的性能.实际上,默认情况下,POI会将所有数据保存在内存中,然后在最后一次写入所有数据.对于大文件,这可能是非常大的内存占用.而是使用流式API,您可以控制内存的使用方式,并逐步将数据写入磁盘.

要创建流式工作簿,请使用以下内容:

  SXSSFWorkbook book = new SXSSFWorkbook(); 
  book.setCompressTempFiles(true);

  SXSSFSheet sheet = (SXSSFSheet) book.createSheet();
  sheet.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk
  // ...



2> Tomislav Nak..:

看到POI花了那么多时间来生成这样的文件,我会感到非常惊讶.我刚刚在大约18s内生成了一张30000行×10个单元格的纸张(没有格式化,公平).原因可能是以下之一:

POI记录可能被打开,如所描述这里

你是从交换内存运行

您的VM可用堆可能非常低


根据我的经验,POI有点慢,如果POI需要作为内存的***负载或需要关闭日志,那么它绝对是**POI问题.我们使用POI生成报告,一旦生成多个电子表格,它就变得非常慢.此外,对于每秒进行数十亿次循环的CPU来说,30000行×10个单元实际上是一个非常微小的数据量.所以,是的,POI是一个相当缓慢的API.
@Gugussee:我想说将30k行的持久性与CPU时钟进行比较有点误导.如果有效地使用大型电子表格很容易,那么两个旗舰办公室生产力套件就不需要那么多工程师/年来打破64k行限制边界.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有