導(dǎo)出100w條數(shù)據(jù)(分100次,每次模擬返回1w條數(shù)據(jù),10線程并發(fā)3次,20線程并發(fā)2次)內(nèi)存控制在1G。
代碼:
easy-poi:
Date start = new Date();
ExportParams params = new ExportParams("大數(shù)據(jù)測(cè)試", "測(cè)試");
Random random=new Random();
Workbook workbook = null;
List<MsgClient> list=new ArrayList();
for (int i = 0; i < 100; i++) {
int s=10000;
for (int j = 0; j < s; j++) { //一百萬數(shù)據(jù)量
MsgClient client = new MsgClient();
client.setBirthday(new Date());
client.setClientName("小明" +(i*10000+j));
client.setClientPhone("18797" + (i*10000+j));
client.setCreateBy("JueYue");
client.setId("1" + (i*10000+j));
client.setRemark("測(cè)試" + (i*10000+j));
MsgClientGroup group = new MsgClientGroup();
group.setGroupName("測(cè)試" + (i*10000+j));
list.add(client);
}
workbook=ExcelExportUtil.exportBigExcel(params, MsgClient.class, list);
list.clear();
}
ExcelExportUtil.closeExportBigExcel();
File savefile = new File("D:/excel/");
if (!savefile.exists()) {
savefile.mkdirs();
}
FileOutputStream fos = new FileOutputStream("D:/excel/excel.bigDataExport"+random.nextInt()+".xlsx");
workbook.write(fos);
fos.close();
System.out.println("bigExcelExport-獲取所有l(wèi)ist完成時(shí)間:"+(new Date().getTime() - start.getTime()));
easy-excel:
Date start = new Date();
Random random=new Random();
FileOutputStream fos = new FileOutputStream("D:/excel/alibaba.bigDataExport"+random.nextInt()+".xlsx");
ExcelWriter writer = new ExcelWriterBuilder()
.autoCloseStream(true)
.excelType(ExcelTypeEnum.XLSX)
.file(fos)
.head(MsgClientAlibaba.class)
.build();
WriteSheet writeSheet = new WriteSheet();
writeSheet.setSheetName("target");
List<MsgClientAlibaba> list=new ArrayList();
for (int i = 0; i < 100; i++) {
int s=10000;
for (int j = 0; j < s; j++) { //一百萬數(shù)據(jù)量
MsgClientAlibaba client = new MsgClientAlibaba();
client.setBirthday(new Date());
client.setClientName("小明" +(i*10000+j));
client.setClientPhone("18797" + (i*10000+j));
client.setCreateBy("JueYue");
client.setId("1" + (i*10000+j));
client.setRemark("測(cè)試" + (i*10000+j));
MsgClientGroup group = new MsgClientGroup();
group.setGroupName("測(cè)試" + (i*10000+j));
// client.setGroup(group);
list.add(client);
}
writer.write(list, writeSheet);
list.clear();
}
writer.finish();
fos.close();
System.out.println("doExport-獲取所有l(wèi)ist完成時(shí)間:"+(new Date().getTime() - start.getTime()));
看下性能對(duì)比
10線程并發(fā)3次(前3次為poi,后3次為easyexcel)

image.png
從cpu和內(nèi)存使用情況來看,兩者相差不大。
耗時(shí):

image.png

image.png
easyexcel耗時(shí)大概在55s左右,poi的耗時(shí)在84s左右。
20線程并發(fā)兩次

image.png
內(nèi)存被cpu差距不大,響應(yīng)時(shí)間是10線程的兩倍。
demo地址:https://gitee.com/luncene/excel-test.git
參考:https://www.yuque.com/easyexcel/doc/about