/eec-benchmark

eec, easyexcel, fastexcel benchmark

Primary LanguageJava

介绍

本项目用于Eec性能测试,分别将以1k, 5k, 10k, 50k, 100k, 500k, 1000k 7个数量级进行读写测试

Eec 外还加入了 FastexcelEasyexcel 进行对比测试

测试包均为当前最新版本(2023-09)

  • eec: 0.5.11
  • fastexcel: 0.15.7
  • easyexcel: 3.3.2

测试文件统一保存在excel-simple目录下,请不要随意改变日志输出格式,否则将导致Reporter运行时异常。

运行时必要依赖包比较

只比较运行时必要依赖,所有依赖包均放到各自*-lib下可自行比较

+------+------+--------+
| Eec  | Fast |  Easy  |
+------+------+--------+
| 0.9m | 1.7m |  21.5m |
+------+------+--------+

编译

执行build脚本

Writer比较

执行writer脚本,其中warmup是一个预热方法,统计时将被忽略。如果对某个工具感兴趣也可以复制脚本中的某行来执行

除Easy外其它两款工具均使用inlineStrshared两种模式测试,测试数据包含int, long, date和15个字符串,其中5列纯英文,10列中英混合,使用shared生成的文件名包含shared标记

Reader比较

执行reader脚本,将Excel行数据转对象统计行数,这里并不会收集对象放到内存,所以不影响内存使用。

如果传入文件名则会读取指定文件名,否则将读取excel-simple目录下的所有文件

一些测试统计结果

执行完测试后使用report脚本查看统计结果,性能比较是按每秒处理多少单元格来计算,单元格是excel最小单位用它计算比单纯按行比较更精准

测试机CPU:Intel i7-1051U @ 1.80GHz,内存:16G

平均耗时:读写总耗时/读写次数
Cells/s: 平均每秒处理多少单元格
+----------+------+------+------+------+--------+--------+--------+----------+
|  TOOLS   |  1k  |  5k  | 10k  | 50k  |  100k  |  500k  | 1000k  | Cells/s  |
+----------+------+------+------+------+--------+--------+--------+----------+
|   Eec(w) |  122 |  356 |  595 | 2756 |   5504 |  27364 |  62339 |   319620 |
|  Fast(w) |  195 |  645 | 1127 | 5155 |  10879 |  50341 | 108775 |   178597 |
|  Easy(w) |  583 | 1338 | 1703 | 5720 |  11374 |  53585 | 105293 |   176250 |
|   Eec(r) |   32 |  115 |  183 |  922 |   1812 |   9222 |  22418 |   905820 |
|  Fast(r) |   70 |  225 |  279 | 1357 |   2653 |  15775 |  28128 |   653525 |
|  Easy(r) |  111 |  312 |  499 | 2400 |   4896 |  24337 |  47316 |   396480 |
+----------+------+------+------+------+--------+--------+--------+----------+
|                              ↓Shared String↓                               |
+----------+------+------+------+------+--------+--------+--------+----------+
|   Eec(w) |  302 | 1110 | 2644 | 7037 |  11532 |  51317 | 102829 |   179068 |
|  Fast(w) |  143 |  574 | 1112 | 5626 |  12074 |  70770 | 223057 |   101016 |
|   Eec(r) |   52 |  316 |  259 | 1247 |   2546 |  13643 |  34518 |   602016 |
|  Fast(r) |  116 |  270 |  324 | 1544 |   3234 |  19962 |  44819 |   450467 |
|  Easy(r) |  218 | 1175 | 1749 | 6523 |  13542 |  68384 | 142516 |   135212 |
+----------+------+------+------+------+--------+--------+--------+----------+

性能比较:每秒处理单元格数量比较[A vs B = (A - B) / B]
+--------+--------------+--------------+--------------+
|        | Eec vs Fast  | Eec vs Easy  | Fast vs Easy |
+--------+--------------+--------------+--------------+
|  Write |      78.96%↑ |      81.34%↑ |       1.33%↑ |
|   Read |      38.61%↑ |     128.47%↑ |      64.83%↑ |
+--------+--------------+--------------+--------------+
|                   ↓Shared String↓                   |
+--------+--------------+--------------+--------------+
|  Write |      77.27%↑ |            - |            - |
|   Read |      33.64%↑ |     345.24%↑ |     233.16%↑ |
+--------+--------------+--------------+--------------+

说明

  1. 运行Reader测试之前请先执行Writer生成测试文件