我有一个使用 Java Web Start 部署的应用程序。当我进行单元测试时,我注意到一个小问题:每当我的应用程序使用 Java Web Start 运行时,特定操作需要很长时间才能执行。然而,在本地运行时,速度相当快。
我所说的特定操作是读取一个大(5k 行)Excel 文件来解析它。这是代码行:
Workbook wb = WorkbookFactory.create(new FileInputStream(new File(inputFile.getText())));
为了解决这个问题,我添加了一种记录时间的方法:
long time1 = System.currentTimeMillis();
Workbook wb = WorkbookFactory.create(new FileInputStream(new File(inputFile.getText())));
long time2 = System.currentTimeMillis();
long diff = time2 - time1;
double seconds = (double)diff / (double)1000;
DecimalFormat df = new DecimalFormat("#,##0.00");
System.out.println("Elapsed Time: " + df.format(seconds) + " seconds.");
这是输出:
(local)
Elapsed Time: 4.83 seconds.
(Java 网络启动)
Elapsed Time: 35.52 seconds.
但是,随后立即运行(在 Java Web Start 上)会产生以下结果:
Elapsed Time: 1.61 seconds.
我怀疑这与 POI 库有关(特别是读取 POI 所需的库的大小,更具体地说,13 MBooxml-schemas-1.0.jar
库文件)。所以,我的问题是:假设是库大小,有什么办法可以防止这种情况发生?我通过控制面板打开了库缓存,那么为什么它似乎需要缓存库?一旦加载,速度很快。但这需要永远的第一次。
Here's an image of the control panel showing that I am allowing it to store the libraries:
以前有人见过这种行为吗?没有 SSCCE,因为...那么,如何发布包含 Java Web Start 问题的 SSCCE?