MyExcel 3.4.0.RC2 发布,性能提升&评测

2020-2-11 12:05

MyExcel,是一个集导入、导出、加密Excel等多项功能的Java工具包。

MyExcel采用声明式语法来构建、读取Excel,屏蔽POI的具体操作细节(对POI无感知),以开发常用的技术替代,使得构建(从简单到高度复杂Excel)以及读取Excel变得极为便利,且构建、读取性能极为优异,占用内存极低(参见下方读取性能评测)。

如导入:


List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class)
        .sheet(0) // 0代表第一个,如果为0,可省略该操作,也可sheet("名称")读取
        .rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
        .beanFilter(ArtCrowd::isDance) // bean过滤
        .read(path.toFile());

本次更新点如下:

  • 修复CsvBuilder线程安全问题;
  • CsvBuilder与DefaultExcelBuilder统一模型,便于源码阅读以及统一升级;
  • 延迟CsvBuilder临时文件创建时机,仅在有数据时创建;
  • CsvBuilder支持Map导出,csv/excel对Map导出时无需指定fieldDisplayOrder,采用Map默认顺序;
  • Csv导出Bigdecimal时,支持格式化;
  • 大幅优化海量数据Excel读取时的内存占用,平均内存占用大约在75兆;
  • 支持无ExcelColumn注解读取,此时默认对所有字段按默认顺序读取;
  • 导出时数据转换添加转换器缓存,以提升导出性能;
  • 支持全局设置时间、数值格式化,对于多时间属性或数值属性,不必一一设置格式化;
  • 新增ExcelModel注解代替ExcelTable注解,新增IgnoreColumn代替ExcludeColumn注解,增强语义、识别度;
  • 代码优化,删除冗余代码以及语义不详代码;
  • DefaultExcelBuilder、DefaultStreamExcelBuilder支持公式导出;
  • 统一.xlsx、.xls、.csv SAX方式读取模型;

具体请参见文档:文档

应各位使用者的要求,本次提供了MyExcel的读取性能测试,具体如下:

测试环境:MAC AIR 8G内存 1.8 GHz 双核Intel Core i5

测试文件:.xlsx文件 55万行 10列 / 循环40次导入  程序每读取完一次,休眠5秒,纯读取,不做任何自定义处理

对比方:MyExcel V3.4.0.RC2   VS    阿里EasyExcel V2.1.6

先上结果,具体参数请移步最后!!!

MyExcel:平均占用内存75M,40次总用时12分钟,数据增加内存占用基本无变化

阿里EasyExcel:平均占用内存300M,15分钟未执行完毕

脚本:


public static void main(String[] args) throws Exception {
        URL htmlToExcelEampleURL = App.class.getResource("/big_build.xlsx");
        Path path = Paths.get(htmlToExcelEampleURL.toURI());

        for (int i = 0; i < 40; i++) {
            SaxExcelReader.of(TestDO.class).readThen(path.toFile(), c -> {
      //          System.out.println(c.birthday);
            });

      //    替换为阿里EasyExcel
      //    EasyExcel.read(path.toFile(), TestDO.class,new DemoDataListener()).sheet().doRead();
            Thread.sleep(5000);
        }
    }



public class TestDO {

    @ExcelColumn(title = "姓名", index = 0)
    String name;

    @ExcelColumn(title = "姓名", index = 1)
    String dance;

    @ExcelColumn(title = "金钱", index = 2)
    String money;

    @ExcelColumn(title = "生日", index = 3)
    String birthday;

    @ExcelColumn(title = "当前日期", index = 4)
    String localDate;

    @ExcelColumn(title = "当前时间", index = 5)
    String localDateTime;

    @ExcelColumn(title = "小猫数目", index = 6)
    String cats;

    @ExcelColumn(title = "小狗数目", index = 7)
    String dogs;

    @ExcelColumn(title = "考拉数目", index = 8)
    String kos;

    @ExcelColumn(title = "考拉数目", index = 9)
    String jos;
}


路过

雷人

握手

鲜花

鸡蛋

周一至周日9:00-18:00

反馈建议

service#bjjem.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! © 2001-2019