Apache POI 性能优化

8
我在使用Apache POI时遇到了性能问题。我已经阅读了FAQ,其中提到了一个性能测试。我关闭了日志记录并使用4GB堆运行了此测试,但无法使测试运行速度快于22秒。
这是我正在运行的测试: http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/SSPerformanceTest.java FAQ中提到,如果我无法在50000行和50列下在3秒内运行此测试,则“问题出在您的环境上”。我已经阅读了网上其他评论,提到禁用poi日志记录和增加堆大小,但没有什么帮助。
还有什么可以检查来修复我的环境?
机器规格(个人台式机):
CPU: Intel i7 8-cores RAM: 16GB OS: Windows 7 64bit JDK: 1.8.0_66 POI: 3.13 JVM Params: -Xmx4g -Xms4g -Dorg.apache.poi.util.POILogger=org.apache.poi.util.NullLogger Command Arguments: XSSF 50000 50 0
我还应该提到,我使用的Apache POI jars来自于maven central 我在github上创建了一个测试项目,您可以简单地克隆该项目并运行:
mvn exec:java
我硬编码了我正在使用的参数,因此您不必在命令行上输入任何特殊内容。文档说这应该在3秒内运行。
测试项目位于这里: https://github.com/mikedehaan/poi-test

提及您的硬件规格可能会有所帮助,以及您如何精确地运行此程序的信息。 - Marged
另外,请问在这个测试中使用的操作系统是什么?Windows,Linux?使用的版本是哪个?对于性能问题,有时候操作系统的版本比JDK版本更为重要。 - Slava Vedenin
1
你是否正在使用-Xms-Xmx来设置堆大小?此外,您尝试过将第四个程序参数设置为0(例如HSSF 50000 50 0)来运行测试吗? - Gord Thompson
是的,我正在使用 -Xmx4g -Xms4g 与 XSSF 50000 50 0。 - Mike De Haan
1
我发现2G内存似乎仍然太低了,使用4G内存可以运行得更快,尽管仍然不是“几秒钟”的速度... - centic
显示剩余5条评论
1个回答

8

我的机器测试结果:

  • HSSF: 2 秒
  • SXSSF: 5 秒
  • XSSF: 27 秒

机器配置:

CPU: Intel i3-2100, 3.10 GHz, 4核
RAM: 16GB
OS: Windows 7 64位
JDK: 1.7.0_76

我进行了分析,发现XSSF很慢是因为在xmlbeanspoi-ooxml-schemas库中有同步方法。您可以通知poi开发人员并要求他们检查此情况。


3
我在自己的环境中看到了类似的结果。我相信你已经找到了答案。我已经在Apache POI用户列表上分享了这些信息。希望他们能给予回应。谢谢! - Mike De Haan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接