Magicodes.IE 在100万数据量下导入导出性能测试
原文作者:HueiFeng
前言
目前Magicodes.IE更新到了2.2.3,感谢大家的支持,同时建议大家在使用过程中如果遇到一些问题或者说需要一些额外的功能可以直接提issues,当然更建议大家提PR。
近期更新
2020.05.24
【Nuget】版本更新到2.2.2
【Excel导入】增加了stream导入扩展方法
【Excel导出】增加了内容居中(单列居中、整表居中)
【导出】对一些中间件代码进行了修复及优化
2020.05.16
【Nuget】版本更新到2.2.1
【PDF导出】对模板引擎进行升级更新
2020.05.12
【Nuget】版本更新到2.2.0
【Excel模板导出】支持导出字节
【文档】Magicodes.IE Csv导入导出
【Excel导入导出】修复标注的添加问题
【导出】ASP.NET Core Web API 中使用自定义格式化程序导出Excel、Pdf、Csv等内容 #64
【导入导出】支持使用System.ComponentModel.DataAnnotations命名空间下的部分特性来控制导入导出 #63
性能测试
电脑配置以及环境如下所示:
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.836 (/November2018Update/19H2)
AMD Ryzen 3600X, CPU, logical and physical cores
.NET Core SDK=5.0.-preview.4.20258.
[Host] : .NET Core 3.1. (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT
Job-OONFAJ : .NET Framework 4.8 (4.8.4180.0), X64 RyuJIT
Job-YIUEXF : .NET Core 2.2. (CoreCLR 4.6.28207.03, CoreFX 4.6.28208.02), X64 RyuJIT
Job-LZHMKS : .NET Core 3.1. (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT
IterationCount= LaunchCount= WarmupCount=
Excel & Csv 导出
Excel导出如下所示:
| Method | Job | Runtime | RowsCount | Mean | Error | StdDev |
|---|---|---|---|---|---|---|
| ExportExcelAsByteArrayTest | Job-OONFAJ | .NET 4.6.1 | 10000 | 153.1 ms | 5.52 ms | 0.85 ms |
| ExportExcelAsByteArrayTest | Job-YIUEXF | .NET Core 2.2 | 10000 | 138.0 ms | 1.53 ms | 0.40 ms |
| ExportExcelAsByteArrayTest | Job-LZHMKS | .NET Core 3.1 | 10000 | 143.0 ms | 9.86 ms | 1.53 ms |
| ExportExcelAsByteArrayTest | Job-OONFAJ | .NET 4.6.1 | 120000 | 1,904.2 ms | 98.37 ms | 25.55 ms |
| ExportExcelAsByteArrayTest | Job-YIUEXF | .NET Core 2.2 | 120000 | 1,662.8 ms | 132.04 ms | 20.43 ms |
| ExportExcelAsByteArrayTest | Job-LZHMKS | .NET Core 3.1 | 120000 | 1,636.1 ms | 99.64 ms | 25.88 ms |
| ExportExcelAsByteArrayTest | Job-OONFAJ | .NET 4.6.1 | 240000 | 3,688.3 ms | 58.52 ms | 15.20 ms |
| ExportExcelAsByteArrayTest | Job-YIUEXF | .NET Core 2.2 | 240000 | 3,268.1 ms | 138.16 ms | 21.38 ms |
| ExportExcelAsByteArrayTest | Job-LZHMKS | .NET Core 3.1 | 240000 | 3,223.9 ms | 70.93 ms | 10.98 ms |
| ExportExcelAsByteArrayTest | Job-OONFAJ | .NET 4.6.1 | 500000 | 7,723.4 ms | 179.06 ms | 46.50 ms |
| ExportExcelAsByteArrayTest | Job-YIUEXF | .NET Core 2.2 | 500000 | 6,959.7 ms | 481.61 ms | 125.07 ms |
| ExportExcelAsByteArrayTest | Job-LZHMKS | .NET Core 3.1 | 500000 | 6,833.2 ms | 331.74 ms | 86.15 ms |
| ExportExcelAsByteArrayTest | Job-OONFAJ | .NET 4.6.1 | 1000000 | 15,443.7 ms | 582.64 ms | 151.31 ms |
| ExportExcelAsByteArrayTest | Job-YIUEXF | .NET Core 2.2 | 1000000 | 13,798.9 ms | 207.09 ms | 32.05 ms |
| ExportExcelAsByteArrayTest | Job-LZHMKS | .NET Core 3.1 | 1000000 | 13,484.1 ms | 424.85 ms | 110.33 ms |
Csv导出如下所示:
| Method | Job | Runtime | RowsCount | Mean | Error | StdDev |
|---|---|---|---|---|---|---|
| ExportCsvAsByteArrayTest | Job-SRSOYE | .NET 4.6.1 | 10000 | 30.43 ms | 2.493 ms | 0.647 ms |
| ExportCsvAsByteArrayTest | Job-WLDFBY | .NET Core 2.2 | 10000 | 30.12 ms | 5.981 ms | 1.553 ms |
| ExportCsvAsByteArrayTest | Job-JSEPRQ | .NET Core 3.1 | 10000 | 24.53 ms | 0.142 ms | 0.022 ms |
| ExportCsvAsByteArrayTest | Job-SRSOYE | .NET 4.6.1 | 120000 | 345.51 ms | 16.385 ms | 4.255 ms |
| ExportCsvAsByteArrayTest | Job-WLDFBY | .NET Core 2.2 | 120000 | 330.03 ms | 16.025 ms | 4.162 ms |
| ExportCsvAsByteArrayTest | Job-JSEPRQ | .NET Core 3.1 | 120000 | 287.98 ms | 11.898 ms | 3.090 ms |
| ExportCsvAsByteArrayTest | Job-SRSOYE | .NET 4.6.1 | 240000 | 687.57 ms | 10.379 ms | 2.695 ms |
| ExportCsvAsByteArrayTest | Job-WLDFBY | .NET Core 2.2 | 240000 | 656.00 ms | 13.741 ms | 2.126 ms |
| ExportCsvAsByteArrayTest | Job-JSEPRQ | .NET Core 3.1 | 240000 | 560.43 ms | 12.721 ms | 3.304 ms |
| ExportCsvAsByteArrayTest | Job-SRSOYE | .NET 4.6.1 | 500000 | 1,478.88 ms | 31.074 ms | 8.070 ms |
| ExportCsvAsByteArrayTest | Job-WLDFBY | .NET Core 2.2 | 500000 | 1,379.52 ms | 20.652 ms | 5.363 ms |
| ExportCsvAsByteArrayTest | Job-JSEPRQ | .NET Core 3.1 | 500000 | 1,182.48 ms | 39.358 ms | 10.221 ms |
| ExportCsvAsByteArrayTest | Job-SRSOYE | .NET 4.6.1 | 1000000 | 2,918.99 ms | 43.023 ms | 6.658 ms |
| ExportCsvAsByteArrayTest | Job-WLDFBY | .NET Core 2.2 | 1000000 | 2,751.29 ms | 19.970 ms | 5.186 ms |
| ExportCsvAsByteArrayTest | Job-JSEPRQ | .NET Core 3.1 | 1000000 | 2,332.39 ms | 57.988 ms | 8.974 ms |
Excel & Csv 导入
Excel导入如下所示:
| Method | Job | Runtime | RowsCount | Mean | Error | StdDev |
|---|---|---|---|---|---|---|
| ImportByStreamTest | Job-URKTYJ | .NET 4.6.1 | 10000 | 711.4 μs | 136.2 μs | 35.37 μs |
| ImportByStreamTest | Job-AFBGUZ | .NET Core 2.2 | 10000 | 746.2 μs | 131.8 μs | 20.40 μs |
| ImportByStreamTest | Job-DUXAFG | .NET Core 3.1 | 10000 | 792.4 μs | 186.5 μs | 48.42 μs |
| ImportByStreamTest | Job-URKTYJ | .NET 4.6.1 | 120000 | 2,297.6 μs | 181.3 μs | 47.08 μs |
| ImportByStreamTest | Job-AFBGUZ | .NET Core 2.2 | 120000 | 2,139.5 μs | 204.5 μs | 53.12 μs |
| ImportByStreamTest | Job-DUXAFG | .NET Core 3.1 | 120000 | 2,035.8 μs | 304.8 μs | 47.17 μs |
| ImportByStreamTest | Job-URKTYJ | .NET 4.6.1 | 240000 | 5,378.2 μs | 887.9 μs | 230.59 μs |
| ImportByStreamTest | Job-AFBGUZ | .NET Core 2.2 | 240000 | 5,345.6 μs | 989.9 μs | 257.08 μs |
| ImportByStreamTest | Job-DUXAFG | .NET Core 3.1 | 240000 | 4,672.5 μs | 1,004.5 μs | 260.86 μs |
| ImportByStreamTest | Job-URKTYJ | .NET 4.6.1 | 500000 | 11,336.6 μs | 657.3 μs | 170.69 μs |
| ImportByStreamTest | Job-AFBGUZ | .NET Core 2.2 | 500000 | 10,833.4 μs | 952.9 μs | 247.45 μs |
| ImportByStreamTest | Job-DUXAFG | .NET Core 3.1 | 500000 | 10,525.7 μs | 561.0 μs | 145.69 μs |
| ImportByStreamTest | Job-URKTYJ | .NET 4.6.1 | 1000000 | 21,965.7 μs | 1,058.5 μs | 274.88 μs |
| ImportByStreamTest | Job-AFBGUZ | .NET Core 2.2 | 1000000 | 20,612.1 μs | 628.2 μs | 163.14 μs |
| ImportByStreamTest | Job-DUXAFG | .NET Core 3.1 | 1000000 | 20,451.1 μs | 3,807.7 μs | 988.84 μs |
Csv导入如下所示:
| Method | Job | Runtime | RowsCount | Mean | Error | StdDev |
|---|---|---|---|---|---|---|
| ImportByStreamTest | Job-OPUXWE | .NET 4.6.1 | 10000 | 294.1 μs | 1.99 μs | 0.31 μs |
| ImportByStreamTest | Job-OVPAAE | .NET Core 2.2 | 10000 | 283.7 μs | 3.54 μs | 0.55 μs |
| ImportByStreamTest | Job-AMXXYD | .NET Core 3.1 | 10000 | 284.5 μs | 1.77 μs | 0.46 μs |
| ImportByStreamTest | Job-OPUXWE | .NET 4.6.1 | 120000 | 2,116.1 μs | 13.28 μs | 2.05 μs |
| ImportByStreamTest | Job-OVPAAE | .NET Core 2.2 | 120000 | 1,855.8 μs | 80.59 μs | 20.93 μs |
| ImportByStreamTest | Job-AMXXYD | .NET Core 3.1 | 120000 | 1,849.3 μs | 186.63 μs | 48.47 μs |
| ImportByStreamTest | Job-OPUXWE | .NET 4.6.1 | 240000 | 5,121.9 μs | 270.99 μs | 70.37 μs |
| ImportByStreamTest | Job-OVPAAE | .NET Core 2.2 | 240000 | 4,448.3 μs | 84.91 μs | 13.14 μs |
| ImportByStreamTest | Job-AMXXYD | .NET Core 3.1 | 240000 | 4,301.9 μs | 78.77 μs | 20.46 μs |
| ImportByStreamTest | Job-OPUXWE | .NET 4.6.1 | 500000 | 11,245.2 μs | 120.46 μs | 18.64 μs |
| ImportByStreamTest | Job-OVPAAE | .NET Core 2.2 | 500000 | 10,214.1 μs | 113.20 μs | 29.40 μs |
| ImportByStreamTest | Job-AMXXYD | .NET Core 3.1 | 500000 | 10,460.1 μs | 90.90 μs | 23.61 μs |
| ImportByStreamTest | Job-OPUXWE | .NET 4.6.1 | 1000000 | 21,807.0 μs | 299.03 μs | 46.28 μs |
| ImportByStreamTest | Job-OVPAAE | .NET Core 2.2 | 1000000 | 19,830.9 μs | 186.01 μs | 48.30 μs |
| ImportByStreamTest | Job-AMXXYD | .NET Core 3.1 | 1000000 | 20,051.3 μs | 395.98 μs | 102.83 μs |
Reference
https://github.com/dotnetcore/Magicodes.IE
原文作者:HueiFeng
Magicodes.IE 在100万数据量下导入导出性能测试的更多相关文章
- Microsoft SQL Server 数据量大 导入导出 问题汇总
问题一: 今天拿到一份有近百万条数据的Excel要导到数据库里面,我先在本地(2014)用自带Excel,然后生成脚本文件去服务器(2008)上执行:文件SQL打开不了. 解决方法: 用自带的sqlc ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- 达观数据CTO纪达麒:小标注数据量下自然语言处理实战经验
自然语言处理在文本信息抽取.自动审校.智能问答.情感分析等场景下都有非常多的实际应用需求,在人工智能领域里有极为广泛的应用场景.然而在实际工程应用中,最经常面临的挑战是我们往往很难有大量高质量的标注语 ...
- Thinkphp框架下PHPExcel实现Excel数据的批量化导入导出
第一步:下载官方的PHPExcel文件,下载地址https://github.com/PHPOffice/PHPExcel 第二步:解压打开,将PHPExcel\Classes\全部文件拷贝到thin ...
- Postgresql数据库数据简单的导入导出
Postgresql数据库数据简单的导入导出 博客分类: DataBase postgres 命令操作: 数据的导出:pg_dump -U postgres(用户名) (-t 表名) 数据库名( ...
- 大数据量下的SQL Server数据库自身优化
原文: http://www.d1net.com/bigdata/news/284983.html 1.1:增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情 ...
- mysql大数据量下的分页
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...
- (转)大数据量下的SQL Server数据库优化
在SQL Server中,默认MDF文件初始大小为5MB,自增为1MB,不限增长,LDF初始为1MB,增长为10%,限制文件增长到一定的数目:一般设计中,使用SQL自带的设计即可,但是大型数据库设计 ...
- 大数据量下MySQL插入方法的性能比较
不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入.插入的方式和数据库引擎都会对插入速度造成影响,这篇文章旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入方 ...
随机推荐
- java线程池原理解析
五一假期大雄看了一本<java并发编程艺术>,了解了线程池的基本工作流程,竟然发现线程池工作原理和互联网公司运作模式十分相似. 线程池处理流程 原理解析 互联网公司与线程池的关系 这里用一 ...
- 08_CSS入门和高级技巧(6)
排查错误 Chrome浏览器的审查功能. 错误1:选择器写错了,压根没有选择上: 如果写了一个错误的选择器, <style type="text/css"> dvi p ...
- redis 集群安装
redis集群安装 1.下载redis源码 2.解压并进入解压后的文件夹redis内 3.make,生成一系列的文件(mkreleasehdr.sh, redis-benchmark, redis-c ...
- 帝国cms列表页内容简介字段smalltext去除里面html格式代码 设置方法
帝国cms列表页内容简介字段smalltext去除里面html格式代码帝国cms列表页调用内容简介出现html代码怎么办 近来在用帝国cms的时候,发现一个问题,在列表页调用产品简介的时候出现了这种h ...
- HDU 2005 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2005题目大意:给定年份,计算是第几天 解题思路: 很水,判定下是否为闰年,方法:四年一闰,百年不闰,四 ...
- 08JAVA基础关键字(final、static)以及抽象类和接口
一.关键字 1.final 修饰类 修饰变量 修饰成员方法 该类为最终类,不能被继承 该变量为常量 该成员方法不能被重写 2.static (1).生命周期 随着类的加载而加载 (2).特点 被本类所 ...
- mysql批量导入删除
批量导入 <insert id="extractOrderBaseHis">INSERT INTO `odr_order_base_his`(`order_base_i ...
- java ->网络通信协议(UDP协议、TCP协议)
网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规 ...
- 类文件结构——深入理解Java虚拟机 笔记三
在之前的笔记中记录过,Java程序变成可执行文件的步骤是:源代码-->经过编译变成class文件-->经过JVM虚拟机变成可执行的二进制文件.因此,为了对JVM执行程序的过程有一个好的了解 ...
- win10安装nodejs,修改全局依赖位置和环境变量配置
为什么要修改nodejs全局依赖位置? nodejs全局依赖安装默认位置在C盘,导致C盘文件太大,影响电脑运行速度. 步骤: 安装nodejs(在node官网下载并安装) 查看nodejs版本(在命令 ...