背景
今日エクスポートしたExcel関数を記述する必要がありますが、時に30,000データの量、23の列数、メモリのうち、CPUを100%、テスト環境の直接打撃ことがわかりました。ローカルテスト、3000個のデータの周囲輸出、500M周りのヒープメモリ一時的な増加で発見されました。そして、見つかったSXSSFWorkbook
クラスを。
簡単な紹介
SXSSFWorkbook
する必要性poi-ooxml
パック3.8
以上をサポートするために始めた、私の側は、使用に適しており3.9
、本質的に、バージョンXSSFWorkbook
クラス(Excel2007
)、それが採用されるために使用される方法硬盘空间
削減大幅に堆内存
、フットプリントをシステムディレクトリの一時フォルダに一時ファイルを作成し、すべてのデータの行に合意した数は、一時ファイルに保存され、すべてではないメモリでは、メモリのみを格納しているよりも大きいの最新のメモリ不足を回避するために、メモリ空間のためのハードディスクの空き容量を達成するために、データ契約の個数を
使用
通常の導出方法からExcelの区別がつかない、ただインスタンス化置き換えSXSSFWorkbook
SXSSFWorkbook workbook = null;
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
//创建工作簿
workbook = new SXSSFWorkbook();
// 打开压缩功能 防止占用过多磁盘
workbook.setCompressTempFiles(true);
// 创建一个工作表
Sheet sheet = workbook.createSheet("表名");
// 创建一行
Row titleRow = sheet.createRow(0);
// 创建一个单元格
Cell cell = titleRow.createCell(0);
// 给单元格赋值
cell.setCellValue("内容");
// 将工作簿写入输出流
workbook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
}finally {
if (workbook != null) {
//使用完毕后将产生的临时文件删除 防止将磁盘搞满
workbook.dispose();
}
if (outputStream != null) {
outputStream.close();
}
}
复制代码
注意点
-
好ましくは、圧縮モードがオンになっている
workbook.setCompressTempFiles(true);
一時ファイルが大幅にボリュームを減らすことができるように -
使用後にリリースされ
workbook.dispose();
た一時ファイルを防ぐために、ハードディスクを爆発するために増加されました