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  
Method RowsCount Mean Error StdDev Min Max Median Ratio RatioSD Gen 0 Gen 1 Gen 2 Allocated
NpoiXlsWorkbookInit 10000 324.7 ms 1.583 ms 0.4110 ms 324.3 ms 325.4 ms 324.6 ms 1.00 0.00 10000.0000 5000.0000 2000.0000 78.6 MB
NpoiXlsxWorkbookInit 10000 1,369.0 ms 73.747 ms 19.1517 ms 1,341.3 ms 1,384.4 ms 1,381.1 ms 4.22 0.06 57000.0000 14000.0000 4000.0000 306.45 MB
EpplusWorkbookInit 10000 552.9 ms 12.740 ms 3.3085 ms 549.7 ms 557.7 ms 552.4 ms 1.70 0.01 18000.0000 7000.0000 3000.0000 121.05 MB
NpoiXlsWorkbookInit 30000 1,222.4 ms 33.717 ms 8.7562 ms 1,209.0 ms 1,233.1 ms 1,222.5 ms 1.00 0.00 29000.0000 11000.0000 3000.0000 235.03 MB
NpoiXlsxWorkbookInit 30000 4,226.2 ms 299.833 ms 77.8658 ms 4,109.5 ms 4,308.6 ms 4,257.2 ms 3.46 0.08 174000.0000 34000.0000 6000.0000 913.9 MB
EpplusWorkbookInit 30000 1,695.4 ms 31.751 ms 8.2457 ms 1,686.3 ms 1,706.5 ms 1,694.2 ms 1.39 0.02 48000.0000 17000.0000 5000.0000 358.51 MB
NpoiXlsWorkbookInit 50000 2,323.5 ms 236.041 ms 61.2990 ms 2,286.0 ms 2,431.9 ms 2,294.2 ms 1.00 0.00 47000.0000 18000.0000 4000.0000 417.1 MB
NpoiXlsxWorkbookInit 50000 7,055.2 ms 279.256 ms 72.5218 ms 6,982.8 ms 7,150.2 ms 7,027.2 ms 3.04 0.10 288000.0000 51000.0000 6000.0000 1545.32 MB
EpplusWorkbookInit 50000 2,806.9 ms 56.266 ms 14.6121 ms 2,792.9 ms 2,829.1 ms 2,804.6 ms 1.21 0.03 79000.0000 27000.0000 7000.0000 578.46 MB
NpoiXlsWorkbookInit 65535 3,646.8 ms 131.129 ms 34.0537 ms 3,603.0 ms 3,696.3 ms 3,642.5 ms 1.00 0.00 61000.0000 21000.0000 4000.0000 504.46 MB
NpoiXlsxWorkbookInit 65535 9,295.6 ms 486.761 ms 126.4104 ms 9,163.3 ms 9,468.6 ms 9,330.5 ms 2.55 0.04 390000.0000 67000.0000 8000.0000 2048.14 MB
EpplusWorkbookInit 65535 3,721.6 ms 124.945 ms 32.4478 ms 3,680.7 ms 3,766.8 ms 3,714.1 ms 1.02 0.01 102000.0000 35000.0000 8000.0000 747.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

NPOI 导出 excel 性能测试相关推荐

  1. Npoi导出excel整理(附源码)

    前些日子做了一个简单的winform程序,需要导出的功能,刚开始省事直接使用微软的组件,但是导出之后发现效率极其低下,绝对像web那样使用npoi组件,因此简单的进行了整理,包括直接根据DataTab ...

  2. [C#]Npoi导出excel整理(附源码)

    前些日子做了一个简单的winform程序,需要导出的功能,刚开始省事直接使用微软的组件,但是导出之后发现效率极其低下,绝对像web那样使用npoi组件,因此简单的进行了整理,包括直接根据DataTab ...

  3. Winform中通过NPOI导出Excel时通过ICellStyle和IDataFormat格式化日期显示格式

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  4. Winforn中通过NPOI导出Excel时通过XSSFClientAnchor和XSSFPicture添加图片

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  5. .NET NPOI导出Excel详解

    http://www.cnblogs.com/yinrq/p/5590970.html .NET NPOI导出Excel详解 NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是 ...

  6. NPOI导出excel(带图片)

    近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅. 1.NPOI官网http://npoi.codeplex.com/,下载最新 ...

  7. NPOI导出Excel示例

    摘要:使用开源程序NPOI导出Excel示例.NPOI首页地址:http://npoi.codeplex.com/,NPOI示例博客:http://tonyqus.sinaapp.com/. 示例编写 ...

  8. C#利用NPOI导出Excel

    C#利用NPOI导出Excel 第一篇文章 View Code 1 using System; 2 using System.Collections.Generic; 3 using System.L ...

  9. NPOI导出excel设置打印为A4纸张

    NPOI导出excel设置打印为A4纸张: Sheet sheet1 = hssfworkbook.CreateSheet("表(横版)");                 sh ...

最新文章

  1. https nginx phpstudy_让phpStudy2018 Nginx 支持WordPress自定义链接
  2. centos下部署tomcat详解
  3. c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏
  4. 初见shell,设置端口参数
  5. linux系统遵循以下哪项协议,实务(互联网技术)通信工程师考试习题库
  6. 【ArcGIS风暴】何为动态投影?这次全面为您揭开ArcGIS中动态投影的神秘面纱!
  7. 关于机器学习,你应该至少学习这8个落地案例|干货集锦
  8. [Leetcode][第1143题][JAVA][最长公共子序列][LCS][动态规划]
  9. SQLite Tutorial 3 : Working with important SqLite Queries (SELECT, INSERT, DELETE, UPDATE,WHERE...)
  10. java 封装log4j_Java项目 切片实现log4j的终极封装
  11. python京东预约抢购流程_[Python] 京东秒杀商品抢购-茅台抢购自动获取抢购时间【修改】...
  12. “scikit-learn(sklearn) 官方文档中文版”
  13. h5 a标签下载链接下载文件
  14. Collecting Coins
  15. Python求正态分布曲线下面积
  16. 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!...
  17. SpringBoot整合jersey
  18. 史上最全最基础的Oracle数据库教程(入门一)介绍Oracle默认用户
  19. unity 2020 怎么写shader使其接受光照?_Unity中实现2D光照系统
  20. 看电脑头痛计算机专业,看电脑头疼怎么回事

热门文章

  1. 找到特定ip地址 修改ip_您如何找到网站的IP地址?
  2. dropbox_来自提示框:望远镜激光瞄准器,Dropbox桌面和Kindle剪辑转换
  3. 基于DeepConvLSTM的传感器信号分类
  4. 你不知道的JavaScript(二)
  5. 在PowerDesigner中设计物理模型1——表和主外键
  6. oncontextmenu事件
  7. 一个不成功人士的“成功之道”
  8. 网络工程师要如何选择?
  9. Hey, everybody!
  10. 秀!微软《550页图解.Net+WPF完整版》.pdf 附下载!