使用HSSF的Apache POI比XSSF快得多 - 下一步是什么?

slu*_*rew 11 java performance google-app-engine apache-poi

我在.xlsx使用Apache POI 解析文件时遇到了一些问题- 我正在使用已java.lang.OutOfMemoryError: Java heap space部署的应用程序.我只处理5MB以下和大约70,000行的文件,所以我怀疑阅读其他问题是否有问题.

正如本评论中所建议的,我决定SSPerformanceTest.java使用建议的变量运行,以便查看我的代码或设置是否有任何问题.结果显示HSSF(.xls)和XSSF(.xlsx)之间存在显着差异:

1)HSSF 50000 50 1:经过1秒

2)SXSSF 50000 50 1:经过5秒

3)XSSF 50000 50 1:经过15秒

FAQ具体说:

如果你不能在3秒内完成所有HSSF,XSSF和SXSSF中50,000行和50列的运行(理想情况下要少得多!),问题在于您的环境.

接下来,它说要运行XLS2CSV.java我已经完成的任务.在上面生成的XSSF文件(包含50000行和50列)中输入大约需要15秒 - 与写入文件所需的数量相同.

我的环境有问题,如果是这样,我该如何进一步调查?

VisualVM的统计数据显示在处理过程中使用的堆高达1.2Gb.当然,考虑到与处理开始之前相比,这是一个额外的演出?

这里的堆积空间肯定太高了?

注意:上面提到的堆空间异常只发生在生产中(在Google App Engine上)并且只发生在.xlsx文件中,但是这个问题中提到的测试都是在我的开发机器上运行的-Xmx2g.我希望如果我可以解决我的开发设置问题,它将在部署时使用更少的内存.

来自app引擎的堆栈跟踪:

java.lang.OutOfMemoryError:Java堆空间在org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260)在org.apache.xmlbeans.impl.store.Cur $ CurLoadContext.startElement(所造成Cur.java:2997)在org.apache.xmlbeans.impl.store.Locale $ SaxHandler.startElement(Locale.java:3211)在org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java: 1082)在org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1802)在org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)

rup*_*hye 6

我遇到了同样的问题,使用Apache POI阅读庞大的.xlsx文件,我遇到了

Excel的流阅读器,github上

该库充当流式API的包装器,同时保留了标准POI API的语法

该库可以帮助您读取大文件.