尝试做一个.NET简单、高效、避免OOM的Excel工具

Github : https://github.com/shps951023/MiniExcel

简介

我尝试做一个.NET简单高效避免OOM的Excel工具

目前主流框架大多将资料全载入到记忆体方便操作,但这会导致记忆体消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免记忆体不够情况。适合像是低规格 azure app service 或是读取大档案等情境。

image

特点

低内存耗用,避免OOM(out of memoery)、频繁 Full GC 情况

支持即时操作每行数据

miniexcel_lazy_load

兼具搭配 LINQ 延迟查询特性,能办到低消耗、快速分页等复杂查询
图片:与主流框架对比的消耗、效率差

queryfirst

轻量,不依赖任何套件,DLL小于100KB

简便操作的 Dapper API 风格

安装

请查看 from NuGet

更新日志

请查看 Release Notes

TODO

请查看 Project · todo

性能测试

Test1,000,000x10.xlsx 做基准与主流框架做性能测试,总共 1千万笔 "HelloWorld",文件大小 23 MB

Benchmarks 逻辑可以在 MiniExcel.Benchmarks 查看或是提交 PR,运行指令

dotnet run -p .\benchmarks\MiniExcel.Benchmarks\ -c Release -f netcoreapp3.1 -- -f * --join

最后一次运行结果 :

BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042 Intel Core i7-7700 CPU 3.60GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores [Host] : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT Job-ZYYABG : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT IterationCount=3 LaunchCount=3 WarmupCount=3 Method 最大内存耗用 平均时间 Gen 0 Gen 1 Gen 2
'MiniExcel QueryFirst'   0.109 MB   726.4 us   -   -   -  
'ExcelDataReader QueryFirst'   15.24 MB   10,664,238.2 us   566000.0000   1000.0000   -  
'MiniExcel Query'   17.3 MB   14,179,334.8 us   367000.0000   96000.0000   7000.0000  
'ExcelDataReader Query'   17.3 MB   22,565,088.7 us   1210000.0000   2000.0000   -  
'Epplus QueryFirst'   1,452 MB   18,198,015.4 us   535000.0000   132000.0000   9000.0000  
'Epplus Query'   1,451 MB   23,647,471.1 us   1451000.0000   133000.0000   9000.0000  
'OpenXmlSDK Query'   1,412 MB   52,003,270.1 us   978000.0000   353000.0000   11000.0000  
'OpenXmlSDK QueryFirst'   1,413 MB   52,348,659.1 us   978000.0000   353000.0000   11000.0000  
'ClosedXml QueryFirst'   2,158 MB   66,188,979.6 us   2156000.0000   575000.0000   9000.0000  
'ClosedXml Query'   2,184 MB   191,434,126.6 us   2165000.0000   577000.0000   10000.0000  
Method 最大内存耗用 平均时间 Gen 0 Gen 1 Gen 2
'MiniExcel Create Xlsx'   15 MB   11,531,819.8 us   1020000.0000   -   -  
'Epplus Create Xlsx'   1,204 MB   22,509,717.7 us   1370000.0000   60000.0000   30000.0000  
'OpenXmlSdk Create Xlsx'   2,621 MB   42,473,998.9 us   1370000.0000   460000.0000   50000.0000  
'ClosedXml Create Xlsx'   7,141 MB   140,939,928.6 us   5520000.0000   1500000.0000   80000.0000  
Query 查询 Excel 返回强型别 IEnumerable 数据 [Try it]

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxsyf.html