【发布时间】:2018-06-28 20:53:49
【问题描述】:
我们有一组实用程序可以读取 .xlsx 文件以获取一些输入数据并生成报告,Apache POI 用于此目的。 Excel 文件有 8 张,平均 50 行和 20 列数据。在普通的 Windows 7 机器中一切正常(阅读开发人员机器)。文件读取将在几秒钟内完成。
最近我们将这些作业移到了 Windows Server 2012 R2 机器上,我们注意到 excel 文件中的最后一张表需要很长时间才能完成读取。我已经复制了最后一张纸以确认这不是数据问题并执行了作业,最后一张纸(是上一次执行中的最后一张)以毫秒为单位完成读取,最后一张(复制的纸)再次获得卡住了15分钟。我在这里最好的猜测是,这可能是因为关闭文件所花费的时间太长了,但这只是一个猜测,没有具体的证据可以证明这一点,如果是这样的话,我也不确定为什么会这样。工作 Windows 盒子和非工作盒子之间的唯一区别是操作系统,其余所有配置都相似。我分析了堆和线程转储,没有发现问题。
POI 和 Windows 服务器盒是否存在任何已知的兼容性问题?还是与代码有关?我们正在使用 POI-XSSF 实现。
【问题讨论】:
-
Apache POI是Java软件。因此它不是直接在“Windows Box”中运行,而是在 Java 运行时环境中的 Java 虚拟机中运行。因此,我将比较 Windows 系统之间的 Java JRE 版本,并看看实现system requirements for Java。 -
我做了比较,虚拟机是一样的,都在 Java 1.8 上运行。运行Java VM没有问题,正如我在问题中提到的那样,excel文件读取总是卡在最后一张
-
接下来我要做的是创建一个最小的示例,它只读取包含多个工作表的
*.xlsx,就像您在当前程序中执行此操作一样。只有没有围绕这个简单任务的全部内容。然后我会在两个系统中进行测试。如果它的性能即使在最小的形状上也不同,那么您可以在此处发布代码并询问它为什么不同。否则,在当前程序中附加您正在执行的更多内容并再次测试。这样做直到出现性能差异。大多数时候你知道原因是什么。如果没有,您可以发布代码
标签: apache-poi windows-server-2012 xssf