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 MB のooxml-schemas-1.0.jar
ライブラリ ファイル) に関係しているということです。だから、私の質問は次のとおりです。それがライブラリのサイズであると仮定すると、これを防ぐ方法はありますか? コントロール パネルからライブラリ キャッシュをオンにしていますが、ライブラリをキャッシュする必要があるように見えるのはなぜですか? ロードされると、高速です。しかし、最初は永遠にかかります。
これは、ライブラリの保存を許可していることを示すコントロール パネルの画像です。
誰もこの種の行動を見たことがありますか?SSCCE がありません。なぜなら、Java Web Start の質問で SSCCE を投稿するにはどうすればよいでしょうか。