java – Apache POI使用HSSF比XSSF快得多 – 下一步呢?

前端之家收集整理的这篇文章主要介绍了java – Apache POI使用HSSF比XSSF快得多 – 下一步呢?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用Apache POI解析.xlsx文件时遇到一些问题 – 我收到了 java.lang.OutOfMemoryError:我部署的应用程序中的 Java堆空间.我只处理5MB和大约70,000行的文件,所以我怀疑从阅读其他问题是一些事情是不幸的.

this comment所示,我决定用建议的变量运行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具体说:

If you can’t run that with 50,000 rows and 50 columns in all of HSSF,XSSF and SXSSF in under 3 seconds (ideally a lot less!),the problem is with your environment.

接下来,它说要运行我已经完成的XLS2CSV.java.在上面生成的XSSF文件(50000行和50列)中进行加载大约需要15秒 – 写入文件所需的时间相同.

我的环境有问题吗?如果有的话,我如何进一步调查?

来自VisualVM的统计数据显示在处理过程中使用的堆高达1.2Gb.当然这是太高了,因为在加工开始之前,这是一个额外的演出呢?

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

来自应用引擎的堆栈跟踪:

Caused by: java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260)
at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.startElement(Cur.java:2997)
at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3211)
at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1802)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parSEOpenTagNS(PiccoloLexer.java:1521)

解决方法

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

excel-streaming-reader-github

该库用作围绕该流API的包装器,同时保留标准POI API的语法

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

猜你在找的Java相关文章