2016-05-24 5 views
0

Apache Poi 3.14を使用して非常に小さなスプレッドシートを開こうとしています。 スプレッドシートはXLSXであり、枠線付きの見出しの列見出しのみを含むワークシートが4つありますApache Poi jar内にパッケージ化されたスプレッドシートを開く際のパフォーマンスの問題

私のJavaプロジェクト内のフォルダにあるスプレッドシートにアクセスするには、以下を使用しています(エクスポート時)。私は、Eclipse IDEから直接でこれを実行すると

 OPCPackage p = OPCPackage.open(getClass().getResourceAsStream(EXPORT_TEMPLATE)); 
    XSSFWorkbook wb = new XSSFWorkbook(p); 

はワークブックがほぼ瞬時に開きますが、私はjarファイルをアプリケーションをエクスポートし、実行したときには、ブックを開くために15秒かかります。

シートを最初から作成するコードを追加する前に、このパフォーマンスを改善する方法を理解しようとしています。

+0

私も最初からワークブックを作成することを発見した更なるテストが同じように時間がかかるの後ので、私は私が間違っ –

+0

をやっているかわからないですあなたが使用に制限されていますApache POI 3.14?もしそうでなければ、以前はxlsxファイルを読み書きする小さなプログラムを書いたのですが、POI 3.15が使われています。 http://stackoverflow.com/questions/37366599/how-to-split-a-excel-file-into-multiple-files-based-on-row-count-using-apache-po/37369058#37369058ここにはリンク。私は合計で6秒の平均でブックを読み書きすることを完了しました(書式をコピーすることなく)。多分それが助けになるでしょう。 – Seanimus

+0

私のテストワークブックには100行の5000行があることに注意してください。 ただし、タブは1つのみです。 – Seanimus

答えて

1

Corporate Antimalwareアプリケーションは、ブックの作成プロセスに影響を与えています。

1

IDEとアプリケーションの内部で異なるClassloader実装があるように思えますが、ランダムアクセスはEclipse外では非常に遅くなります。

jarファイルからリソースを完全に取り出して、バイト[]にすることでテストします。コモンズ-IOを経由してのみ、それを構築する:

byte[] bytes = IOUtils.toByteArray(getClass().getResourceAsStream(EXPORT_TEMPLATE)) 
XSSFWorkbook wb = new XSSFWorkbook(new ByteArrayInputStream(bytes)); 
+1

私はあなたの提案を試みましたが、同じ結果を得ました。メモリに空のワークブックをインスタンス化すると、同じ問題が発生します。マルウェア対策アプリケーションの問題であると確信しています。ワークブックが作成されているときに、タスクマネージャでCPU時間がかかることがわかります。 –

関連する問題