我有一个使用 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.");
这是输出:
(当地的)
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
库文件)。所以,我的问题是:假设它是库大小,有什么办法可以防止这种情况发生吗?我通过控制面板打开了库缓存,为什么它似乎需要缓存库?加载后,速度很快。但这需要永远的第一次。
这是控制面板的图像,显示我允许它存储库:
有没有人见过这种行为?没有 SSCCE,因为...好吧,您如何发布带有 Java Web Start 问题的 SSCCE?