尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SpreadCheetah性能揭秘:实测比ClosedXML快40倍的秘密是什么

SpreadCheetah性能揭秘:实测比ClosedXML快40倍的秘密是什么 SpreadCheetah性能揭秘实测比ClosedXML快40倍的秘密是什么【免费下载链接】spreadcheetahSpreadCheetah is a high-performance .NET library for generating spreadsheet (Microsoft Excel XLSX) files.项目地址: https://gitcode.com/gh_mirrors/sp/spreadcheetahSpreadCheetah 是一款专为 .NET 打造的高性能 XLSX 表格生成库它采用流式写入设计在官方基准测试中生成 100 万单元格仅需约 33 毫秒实测速度比 ClosedXML 快 40 倍以上内存占用却只有其万分之一。本文将带你实测这份基准数据并深入源码拆解它为什么这么快。一、实测基准40 倍差距是怎么跑出来的项目使用 BenchmarkDotNet 做了公开基准测试对比对象包括 ClosedXML、EPPlusFree 和 Open XML SDK。测试场景很纯粹一张工作表10 万行 × 10 列全部填充字符串约 100 万个单元格测试代码就在 StringCells.cs 中每个库都采用了各自最高效的写法。.NET 10 环境下的成绩AMD Ryzen 7 9800X3D库平均耗时内存分配SpreadCheetah32.86 ms15.43 KBOpen XMLSAX 方式342.90 ms363.9 MBEPPlusFree831.39 ms859 MBOpen XMLDOM 方式922.37 ms751.3 MBClosedXML1486.15 ms1458.5 MB⚡ 速度上ClosedXML 的 1486 ms ÷ 32.86 ms ≈45 倍内存上1.4 GB 对比 15 KB差距更是达到了9 万倍。在 .NET 8 环境下 SpreadCheetah 用时 49.75 ms仍有约 34 倍的优势。二、快 40 倍的秘密4 个关键设计1. 单向流式写入永不回写SpreadCheetah 采用**前向写入forward-only**模型工作表从左到右、行从上到下、单元格从左到右写完即弃。它不需要像 ClosedXML 那样在内存中维护一棵完整的单元格对象树写完一行就能直接刷入输出流。这正是它能以 KB 级内存写百万单元格的根本原因。2. 内存池复用把 GC 压力降到最低整个库大量使用ArrayPool对象池复用数组避免高频内存分配。例如行缓冲就直接从共享字节池中租借SpreadsheetBuffer.cs 中_buffer通过ArrayPoolbyte.Shared.Rent(bufferSize)租借用完即还。配套的 PooledArray.cs 则是通用版的池化数组封装连源码生成器产出的代码也会自动使用池化数组从源头消灭分配。3. 字节级直写跳过中间对象单元格内容不经过 XML 对象模型而是直接以 UTF-8 字节写入缓冲区再整块刷入流。XML 特殊字符、、等的转义在 XmlUtility.cs 中利用 .NET 8 的SearchValues高性能查找实现比逐字符判断快得多。异步 API 贯穿始终CreateNewAsync→StartWorksheetAsync→AddRowAsync→FinishAsync大文件写入不会阻塞线程。4. 源码生成器编译期替你优化内置的 Source Generator 在编译期分析你的 C# 类型并生成写行代码生成的实现直接使用池化数组 ValueTask没有反射、没有中间对象属于零成本抽象级别。详见 WorksheetRowAttribute.cs。三、快速上手三步生成第一张 XLSXawait using var spreadsheet await Spreadsheet.CreateNewAsync(stream); await spreadsheet.StartWorksheetAsync(Sheet 1); var row new ListCell { new Cell(Answer:), new Cell(42) }; await spreadsheet.AddRowAsync(row); await spreadsheet.FinishAsync();安装只需一条命令dotnet add package SpreadCheetah。主入口类 Spreadsheet.cs 提供了创建与写入的完整 API支持 .NET Standard 2.0.NET Framework到 .NET 10并且可裁剪、兼容 NativeAOT。四、选型建议它适合你的项目吗维度SpreadCheetahClosedXML / EPPlus生成 XLSX✅ 极快内存极低✅ 较慢内存占用高打开 / 编辑已有文件❌ 仅生成✅ 支持异步 API✅ 原生支持⚠️ 有限依赖 Excel❌ 无依赖❌ 无依赖 一句话总结如果你的场景是批量导出报表、数据落地文件这类只写不读的任务SpreadCheetah 是 .NET 生态里目前性能最强的选择如果需要频繁修改已有工作簿再考虑 ClosedXML 等全功能库。五、总结SpreadCheetah 用 33 毫秒和 15 KB 内存的成绩证明了XLSX 生成不必昂贵。它的 40 倍提速并非来自某一行魔法代码而是流式单向写入 内存池复用 字节级直写 编译期生成四套设计环环相扣的结果。对新手来说API 与 ClosedXML 的直觉相近切换成本很低——如果你的 .NET 项目正被导表慢、内存爆困扰不妨现在就把测试代码换成它跑一轮基准对比。【免费下载链接】spreadcheetahSpreadCheetah is a high-performance .NET library for generating spreadsheet (Microsoft Excel XLSX) files.项目地址: https://gitcode.com/gh_mirrors/sp/spreadcheetah创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表