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

惟心
 惟心
发布于 2020年02月11日
收藏 27

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;
}

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:MyExcel 3.4.0.RC2 发布,性能提升&评测
加载中

最新评论(10

惟心
惟心
抱歉,因单元测试未覆盖全面,导致3.4.0.RC2读取时存在一个比较严重的BUG,已修复,如需使用,请直接升级为3.4.0.RC3
云轶晟
这个和Apache common csv 比起来如何
惟心
惟心
仅提供最基础的csv读写功能
ExtremeTalk
ExtremeTalk
更新挺快啊
熏小渼
熏小渼
已经切换,支持。希望一直更新下去,别坑。
惟心
惟心
保证不坑,会一直更新下去,但随着MyExcel越来越稳定,使用用户越来越多,为保证代码可靠性以及提升整体代码的质量,更新频率会由目前基本一周一更降低到一月甚至一季度一更,感谢使用!!!
开源中国合格公民
开源中国合格公民
刚才试了一下,写100W 10列,内存占用比easyExcel感觉高好多啊!easyExcel在500M-1G之间,MyExcel之间OOM了;是我测试的有问题吗?
List<DemoData> data = data();
for (int i = 0; i < 10; i++) {
Workbook workbook = DefaultExcelBuilder.of(DemoData.class).sheetName("sheet").build(data);
FileExportUtil.export(workbook, new File("D:/dev/" + i + ".xlsx"));
}
@ExcelColumn(title = "字符串标题")
private String string;
@ExcelColumn(title = "字符串1标题")
private String string1;
@ExcelColumn(title = "字符串2标题")
private String string2;
@ExcelColumn(title = "字符串3标题")
private String string3;
@ExcelColumn(title = "字符串4标题")
private String string4;
@ExcelColumn(title = "字符串5标题")
private String string5;
@ExcelColumn(title = "日期标题")
private Date date;
@ExcelColumn(title = "double标题")
private Double doubleData;
@ExcelColumn(title = "int标题")
private Integer integer;
@ExcelColumn(title = "long标题")
private Long aLong;

用DefaultStreamExcelBuilder导出,,内存就非常低了
惟心
惟心
DefaultExcelBuilder存在的目的就是给小批量的数据导出用的,这个在使用文档中有说明,这样可以去除使用DefaultStreamExcelBuilder带来的复杂性(虽然也不复杂,仅多了一个步骤),但能减少使用者的每一行代码是MyExcel的目标。感谢使用,有任何问题可以随时提问,会尽快回复!!!
msscn
msscn
坚持easyExcel一百年不动摇
开源中国合格公民
开源中国合格公民
👍已经换成MyExcel了
返回顶部
顶部