我有一个应用程序,我正在使用Java Web Start部署它。在进行单元测试时,我注意到了一个小问题:每当我的应用程序使用Java Web Start运行时,特定的操作需要很长时间才能执行。然而,在本地运行时,它非常快。
我所说的特定操作是读取一个大型(5k行)Excel文件以解析它。这是代码行:
为了找出问题,我添加了一种记录时间的方法:
(JWS) Java网络启动
但是,随后立即运行(在Java Web Start上)会出现以下情况:
我的猜测是这与POI库有关(特别是读取POI所需的库文件大小,更具体地说是13 MB的
以下是控制面板的图像,显示我允许它存储库:
有人见过这种行为吗?没有SSCCE,因为……好吧,如何在Java Web Start问题中发布SSCCE呢?
我所说的特定操作是读取一个大型(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.
(JWS) Java网络启动
Elapsed Time: 35.52 seconds.
但是,随后立即运行(在Java Web Start上)会出现以下情况:
Elapsed Time: 1.61 seconds.
我的猜测是这与POI库有关(特别是读取POI所需的库文件大小,更具体地说是13 MB的
ooxml-schemas-1.0.jar
库文件)。那么,我的问题是:假设是库文件大小的原因,有没有什么方法可以防止这种情况发生?我已经通过控制面板打开了库缓存,为什么似乎仍需要缓存库文件?一旦它被加载,就很快。但第一次加载需要很长时间。以下是控制面板的图像,显示我允许它存储库:
![enter image description here](https://istack.dev59.com/7QwQq.webp)