NPOI 导出 excel 性能测试

NPOI 导出 excel 性能测试

Intro

网上看到很多人说 NPOI 的性能不行,自己写了一个 NPOI 的扩展库,于是想尝试看看 NPOI 的性能究竟怎么样,道听途说始终不如自己动手一试。

测试环境

测试工具:

  • BenchmarkDotNet v0.11.5

  • EPPlus.Core.Extensions v2.3.2

  • EPPlus v4.5.3.1

测试代码:(Github 源码)

[SimpleJob(launchCount: 1, warmupCount: 1, targetCount: 5)]	
[MemoryDiagnoser]	
[MinColumn, MaxColumn, MeanColumn, MedianColumn]	
public class WorkbookBasicTest	
{	private const int ColsCount = 10;	[Params(10000, 30000, 50000, 65535)]	public int RowsCount;	[Benchmark(Baseline = true)]	public byte[] NpoiXlsWorkbookInit()	{	var workbook = ExcelHelper.PrepareWorkbook(ExcelFormat.Xls);	var sheet = workbook.CreateSheet("tempSheet");	for (var i = 0; i < RowsCount; i++)	{	var row = sheet.CreateRow(i);	for (var j = 0; j < ColsCount; j++)	{	var cell = row.CreateCell(j);	cell.SetCellValue($"as ({i}, {j}) sa");	}	}	return workbook.ToExcelBytes();	}	[Benchmark]	[MethodImpl(MethodImplOptions.NoInlining)]	public byte[] NpoiXlsxWorkbookInit()	{	var workbook = ExcelHelper.PrepareWorkbook(ExcelFormat.Xlsx);	var sheet = workbook.CreateSheet("tempSheet");	for (var i = 0; i < RowsCount; i++)	{	var row = sheet.CreateRow(i);	for (var j = 0; j < ColsCount; j++)	{	var cell = row.CreateCell(j);	cell.SetCellValue($"as ({i}, {j}) sa");	}	}	return workbook.ToExcelBytes();	}	[Benchmark]	[MethodImpl(MethodImplOptions.NoInlining)]	public byte[] EpplusWorkbookInit()	{	var excel = new ExcelPackage();	var sheet = excel.Workbook.Worksheets.Add("tempSheet");	for (var i = 1; i <= RowsCount; i++)	{	for (var j = 1; j <= ColsCount; j++)	{	sheet.Cells[i, j].Value = $"as ({i}, {j}) sa";	}	}	return excel.GetAsByteArray();	}	
}

测试结果

在 Github 上查看结果 https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.WorkbookBasicTest-report-github.md

BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362	
Intel Core i5-3470 CPU 3.20GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores	
.NET Core SDK=3.0.100	[Host]     : .NET Core 2.2.6 (CoreCLR 4.6.27817.03, CoreFX 4.6.27818.02), 64bit RyuJIT	Job-CBYTBY : .NET Core 2.2.6 (CoreCLR 4.6.27817.03, CoreFX 4.6.27818.02), 64bit RyuJIT	
IterationCount=5  LaunchCount=1  WarmupCount=1  
MethodRowsCountMeanErrorStdDevMinMaxMedianRatioRatioSDGen 0Gen 1Gen 2Allocated
NpoiXlsWorkbookInit10000324.7 ms1.583 ms0.4110 ms324.3 ms325.4 ms324.6 ms1.000.0010000.00005000.00002000.000078.6 MB
NpoiXlsxWorkbookInit100001,369.0 ms73.747 ms19.1517 ms1,341.3 ms1,384.4 ms1,381.1 ms4.220.0657000.000014000.00004000.0000306.45 MB
EpplusWorkbookInit10000552.9 ms12.740 ms3.3085 ms549.7 ms557.7 ms552.4 ms1.700.0118000.00007000.00003000.0000121.05 MB














NpoiXlsWorkbookInit300001,222.4 ms33.717 ms8.7562 ms1,209.0 ms1,233.1 ms1,222.5 ms1.000.0029000.000011000.00003000.0000235.03 MB
NpoiXlsxWorkbookInit300004,226.2 ms299.833 ms77.8658 ms4,109.5 ms4,308.6 ms4,257.2 ms3.460.08174000.000034000.00006000.0000913.9 MB
EpplusWorkbookInit300001,695.4 ms31.751 ms8.2457 ms1,686.3 ms1,706.5 ms1,694.2 ms1.390.0248000.000017000.00005000.0000358.51 MB














NpoiXlsWorkbookInit500002,323.5 ms236.041 ms61.2990 ms2,286.0 ms2,431.9 ms2,294.2 ms1.000.0047000.000018000.00004000.0000417.1 MB
NpoiXlsxWorkbookInit500007,055.2 ms279.256 ms72.5218 ms6,982.8 ms7,150.2 ms7,027.2 ms3.040.10288000.000051000.00006000.00001545.32 MB
EpplusWorkbookInit500002,806.9 ms56.266 ms14.6121 ms2,792.9 ms2,829.1 ms2,804.6 ms1.210.0379000.000027000.00007000.0000578.46 MB














NpoiXlsWorkbookInit655353,646.8 ms131.129 ms34.0537 ms3,603.0 ms3,696.3 ms3,642.5 ms1.000.0061000.000021000.00004000.0000504.46 MB
NpoiXlsxWorkbookInit655359,295.6 ms486.761 ms126.4104 ms9,163.3 ms9,468.6 ms9,330.5 ms2.550.04390000.000067000.00008000.00002048.14 MB
EpplusWorkbookInit655353,721.6 ms124.945 ms32.4478 ms3,680.7 ms3,766.8 ms3,714.1 ms1.020.01102000.000035000.00008000.0000747.85 MB

从上面的测试结果来看,npoi 导出 xls 的性能还是相当好的,无论是所用时间还是内存都占优势,只是 xls 一个 sheet 最多 65535 行数据,所以测试数据最多只有 65535,其次就是 epplus 导出 xlsx,最次是 npoi 导出 xlsx 了。

测试结论

如果使用 NPOI 导出建议导出 xls,如果要导出数据较多,可以导出 csv ,如果看了另外一个 csv 导出的测试,csv 导出性能要比 excel 好很多,如果实在是要导出 excel,导入 xls 的话就分多个 sheet 处理,如果一定要导出 xlsx 格式的 excel ,推荐用 epplus 来处理,相比 npoi 导出 xlsx 性能更好,内存占用更少

Reference

  • https://benchmarkdotnet.org/

  • https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/WorkbookBasicTest.cs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

caffe安装常见问题

https://blog.csdn.net/u012576214/article/details/68947893解决办法是依据出现错误的顺序而给出的&#xff0c;为了方便&#xff0c;可以直接先执行所有解决办法后再安装caffe。 1. ./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: No such file or directo…

Asp.Net Core 单元测试正确姿势

背景ASP.NET Core 支持依赖关系注入 (DI) 软件设计模式&#xff0c;并且默认注入了很多服务&#xff0c;具体可以参考 官方文档, 相信只要使用过依赖注入框架的同学&#xff0c;都会对此有不同深入的理解&#xff0c;在此无需赘言。然而&#xff0c;在引入 IOC 框架之后&#x…

ubuntu 通过 海康sdk调用摄像头抓图片

https://blog.csdn.net/ding977921830/article/details/75272384 在本文中我的电脑是使用的Ubuntu16.04 64位&#xff0c;使用工具是QT5.7.1&#xff0c;opencv2.4.9.一、根据电脑的型号下载海康威视的SDK包网址&#xff1a;http://www.hikvision.com/cn/download_61.html。我的…

程序员与「中台」的爱恨交错

大家好&#xff0c;我是Z哥。这篇文章比较长&#xff0c;有5200字&#xff0c;不过希望你能耐心看完&#xff0c;特别是程序员。中台这个词&#xff0c;最近两年特别火&#xff0c;它的爆发源于2015年张勇在阿里发出的内部信中提到的“大中台&#xff0c;小前台”战略。随后吸引…

ubuntu 文件管理器死机

有时会遇到Ubuntu文件管理器死掉的情况&#xff0c;怎么点击都没有反应&#xff0c;这时只需在终端上运行ps -A | grep nautilus&#xff0c;查找文件管理器nautilus对应的pid,然后sudokillpid就可以关闭文件管理器进程&#xff0c;随便点击一个文件夹就可以重启文件管理器了。…

「云」发展的怎么样了?

周五发了一篇聊中台的文章&#xff0c;《》。有小伙伴给我留言问到&#xff0c;身边好像直接基于「云」做开发的人和企业越来越多了&#xff0c;如何看待「云」的渗透率逐渐走高对我们技术人的影响。对于这点我的观点是&#xff0c;一件事情分工越来越细是我们整个社会向前发展…

ML.NET 1.4 发布,跨平台机器学习框架

ML.NET 是一个面向 .NET 开发人员的开源和跨平台机器学习框架&#xff0c;它包括 Model Builder 和 CLI(命令行接口)&#xff0c;让使用自动机器学习(AutoML)构建自定义机器学习模型变得更容易。1.4 版本已经发布了&#xff0c;以下是本次更新的一些亮点&#xff1a;基于 GPU 支…

安装distro ./test.sh 找不到路径

https://github.com/torch/distro ./test.sh 显示找不到path&#xff0c; 需要我们在./update.sh之后 source /root/.bashrc

使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API

1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作什么是REST REST一词最早是在2000年&#xff0c;由Roy Fielding在他的博士论文《Architectural Styles and the Design of Network-based Software Architecture》中提出的。他在本文中创造了REST这个术语。这篇论文的地…

Ubuntu 安装 cuda deb 指令 不要自动装9.2

比如安装 9.0 sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.148-1_amd64.deb sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub sudo apt-get update sudo apt-get install cuda 最后一句会自动安装9.2 需要改为&#xff1a; sudo apt-get install cuda-9.0

Visual Studio Online 的 FAQ:iPad 支持、自托管环境、Azure 账号等

iPad 支持 目前&#xff0c;Web 版 VS Code 只支持基于 Chromium 的浏览器&#xff0c;还不支持 iPad 上的浏览器。但对于 Safari 的支持&#xff0c;是 Visual Studio Online 团队的一件高优先级的任务。更多详情&#xff0c;可以关注&#xff1a; https://github.com/Microso…

2019 .NET China Conf之我逛魔都

趁着参加首届.NET开发者峰会之际&#xff0c;我也是第一次到上海&#xff0c;因此也趁机逛了一下大魔都&#xff0c;和你分享一波我在魔都拍的照片组。酒店所在地&#xff1a;邮电新村地铁站附近为何选择这里&#xff1f;因为离会场酒店6个地铁站&#xff0c;离南京东路和外滩半…

[object detection] TypeError: can't pickle dict_values objects

https://github.com/tensorflow/models/issues/4780 If youre using python3 , add list() to category_index.values() in model_lib.py about line 381 as this list(category_index.values()).

参加首届中国 .NET 开发者峰会有感

参加首届中国 .NET 开发者峰会有感Intro很高兴能够有机会参加首届中国 .NET 开发者峰会&#xff0c;与从全国各地赶来上海参加活动的 .NETer 一起参与这空前的 .NET 的盛会。大会有许多从外地过来参加的开发者们&#xff0c;也有些讲师也是从外地赶过来为我们分享&#xff0c;特…

推荐一款神器-VBAC#代码编辑管理器

网名&#xff1a;liucqa&#xff0c;OFFICE开发领域真大牛&#xff0c;比ExcelHome所有版主和所有出OFFICE开发类书籍的人都要牛的人&#xff0c;出品了它的大作&#xff0c;给大家推荐使用。特色功能&#xff1a;C#&VBA代码格式化/代码收藏/高亮语法详细介绍说明如下&…

mmdnn cannot import caffe

export PYTHONPATH/path/to/your/pycaffe:$PYTHONPATH

【.NET Core 3.0】 46 ║ 授权认证:自定义返回格式

前言哈喽大家好&#xff0c;马上就要年末了&#xff0c;距离新的一年&#xff0c;只有50天了&#xff0c;春节是75天。在这个时节内&#xff0c;天气逐渐变凉&#xff0c;但是大家的心肯定很热吧&#xff0c;因为发生了两件大事&#xff1a;1、双十一买买买&#xff0c;在这个让…

mmdnn TensorFlow is outdated

不仅要更新 tf 还要 python import tensorflow as tf print(tf.__path__) 将其export 到PYTHONPATH当中

.NET Core 如何生成真正的ICO图标

点击上方蓝字关注“汪宇杰博客”导语前一阵我终于完成了博客系统动态生成favicon的功能。众所周知&#xff0c;favicon肯定有一个ico格式的图标&#xff0c;其余可以用 png manifest 的方式输出。然而这个ICO格式让我小收福报&#xff0c;今天就给大家分享一下解决办法。.NET自…

error: ‘CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD’ was not declared in this scope

cudnn版本问题 cuda8.0cudnn5.1可取 还应修改 Makefile.config当中cuda的路径