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插入方法的性能比较
不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入.插入的方式和数据库引擎都会对插入速度造成影响,这篇文章旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入方 ...
随机推荐
- STM32 Cube之旅-尝试新的开发方式
尝试使用Cube进行一些开发学习,这里对此做一个梗概,先有一个全面的了解. 文章目录 Cube全家桶 CubeMX CubeIDE CubeProg 结语 Cube全家桶 曾几何时,ST刚推出Cube ...
- Python 简明教程 --- 0,前言
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io Life is short, you need Python! -- Bruce Eckel 0,关 ...
- linux --vim 补充 .vimrc
1.今天发现了一个新的功能.vimrc 1.这个是一个个人配置文件,可以在这个里面首先对vim进行一些设置呢 如果系统没有.vimrc文件,可以自己创建一个,touch .vimrc 举个栗子,我在. ...
- 使用plupload实现多文件上传,自定义参数
下载地址:点击打开链接 1.在开发中可能需要用户附件上传的功能,实现批量上传功能其实就将多个上传任务放到一个集合中,分别上传. 2,使用plupload js插件可以很轻松的实现带参数的多文件上传 3 ...
- 黑马程序员_毕向东_Java基础视频教程——if 语句(单条语句)(随笔)
if 语句(单条语句) 格式(三种) [注意]:如果 if 控制的语句只有一条,则 这个 { } 括号可以不写 if (条件表达式) { 执行语句; } class Test{ public stat ...
- 线上Kafka突发rebalance异常,如何快速解决?
文章首发于[陈树义的博客],点击跳转到原文<线上Kafka突发rebalance异常,如何快速解决?> Kafka 是我们最常用的消息队列,它那几万.甚至几十万的处理速度让我们为之欣喜若狂 ...
- 第二篇:TTS(Text To Speech)语音合成
TTS(Text To Speech)语音合成: 百度AI语音合成SDK文档--python SDK: https://ai.baidu.com/docs#/TTS-Online-Python-SDK ...
- 51Nod栈
LYK有一个栈,众所周知的是这个数据结构的特性是后进先出的. LYK感觉这样子不太美妙,于是它决定在这个前提下将其改进,也就是说,每次插入元素时,可以在栈顶或者栈底插入,删除元素时,只能在栈顶删除.L ...
- 首字母变大写(hdu2026)
输入方式:直接循环输入带有空格的未知长度的字符串. 思考:直接循环输入带有空格的未知长度的字符串,用while(gets_s())函数,循环内外不用getchar()函数.(注意,每次字符串以整体输入 ...
- java中String转换成json,json转换成String
前置添加pom <!-- 配置gson --> <dependency> <groupId>com.google.code.gson</groupId> ...