XLBench Results
Each section below embeds the full BenchmarkDotNet environment block (OS, CPU,
.NET SDK and runtime). Timings are hardware-specific; treat the allocation/GC
columns as the most portable signal across machines. Regenerate locally with
scripts/run-benchmarks.ps1.
📈 Interactive charts (GitHub Pages). Static charts and the full tables follow.
Each results table (one per test method) is heat-mapped independently on the Pages site (🟩 best → 🟥 worst).
⧗ Carried over from an earlier run. The rows and chart points below marked with this symbol were not measured here — the library is commercial and needs a licence key this run did not have — so they are replayed from snapshots/. Compare them as indicative rather than like-for-like, and see the repository README for how to refresh a snapshot.
- IronXL 2026.8.1, Job-HTCPYF job, captured 2026-08-03 on same hardware as this run.
Libraries under test
| Library |
Version |
Source |
| ClosedXML |
0.105.1 |
this run |
| EPPlus |
8.6.3 |
this run |
| OpenXML SDK |
3.5.1 |
this run |
| NPOI |
2.8.0 |
this run |
| MiniExcel |
1.45.0 |
this run |
| XLibur |
0.310.0 |
this run |
| IronXL â§— |
2026.8.1 |
snapshot (2026.8.1, Job-HTCPYF, captured 2026-08-03) |
Comparison charts
Lower is better. Charts render in the GitHub file view; the Pages site has interactive versions.
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Read · open + set properties + save — time (ms)"
x-axis ["NPOI", "XLibur", "EPPlus", "ClosedXML", "IronXL â§—"]
y-axis "Time (ms)"
bar [9.44, 16.85, 29.71, 38.37, 208.75]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Read · open + set properties + save — allocated (MB)"
x-axis ["XLibur", "NPOI", "ClosedXML", "EPPlus", "IronXL â§—"]
y-axis "Allocated (MB)"
bar [1.74, 1.9, 13.18, 13.88, 152.81]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Read · open + read all cells — time (ms)"
x-axis ["MiniExcel", "XLibur", "EPPlus", "OpenXML SDK", "NPOI", "ClosedXML", "IronXL â§—"]
y-axis "Time (ms)"
bar [694.31, 1128.88, 1220.58, 1255.79, 2618.66, 6522.65, 9318.11]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Read · open + read all cells — allocated (MB)"
x-axis ["XLibur", "OpenXML SDK", "MiniExcel", "EPPlus", "NPOI", "ClosedXML", "IronXL â§—"]
y-axis "Allocated (MB)"
bar [308.54, 628.84, 629.69, 925.23, 1077.8, 1083.14, 6333.04]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Write · create + save — time (ms)"
x-axis ["MiniExcel", "OpenXML SDK", "XLibur", "ClosedXML", "EPPlus", "NPOI", "IronXL â§—"]
y-axis "Time (ms)"
bar [61.12, 173.23, 246.23, 414.64, 461.4, 722.67, 943.14]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Write · create + save — allocated (MB)"
x-axis ["XLibur", "MiniExcel", "OpenXML SDK", "ClosedXML", "NPOI", "EPPlus", "IronXL â§—"]
y-axis "Allocated (MB)"
bar [60.51, 84.59, 134.2, 181.09, 247.46, 322.9, 797.63]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Report · data + conditional formatting + chart — time (ms)"
x-axis ["OpenXML SDK", "XLibur", "EPPlus", "ClosedXML", "NPOI", "IronXL â§—"]
y-axis "Time (ms)"
bar [8.59, 9.99, 19.64, 22.18, 41.6, 387.85]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Report · data + conditional formatting + chart — allocated (MB)"
x-axis ["XLibur", "OpenXML SDK", "ClosedXML", "EPPlus", "NPOI", "IronXL â§—"]
y-axis "Allocated (MB)"
bar [3.48, 4.92, 8.02, 14, 16.26, 237.38]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · delete rows + set column + recalculate — time (ms)"
x-axis ["XLibur", "OpenXML SDK", "EPPlus", "ClosedXML", "NPOI", "IronXL â§—"]
y-axis "Time (ms)"
bar [12.71, 25.43, 100.83, 401.24, 404.61, 1577.27]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · delete rows + set column + recalculate — allocated (MB)"
x-axis ["XLibur", "OpenXML SDK", "EPPlus", "ClosedXML", "NPOI", "IronXL â§—"]
y-axis "Allocated (MB)"
bar [4.2, 9.8, 142.49, 337.77, 413.44, 753.86]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · insert 2 columns + recalculate — time (ms)"
x-axis ["XLibur", "EPPlus", "OpenXML SDK", "ClosedXML", "NPOI", "IronXL â§—"]
y-axis "Time (ms)"
bar [15.3, 17.53, 36.23, 43.33, 57.57, 113.28]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · insert 2 columns + recalculate — allocated (MB)"
x-axis ["XLibur", "EPPlus", "OpenXML SDK", "ClosedXML", "NPOI", "IronXL â§—"]
y-axis "Allocated (MB)"
bar [4.87, 11.41, 13.05, 13.64, 30.72, 104.88]
Detailed results
BenchmarkDotNet v0.15.8, Windows 11 (10.0.22631.6199/23H2/2023Update/SunValley3)
AMD Ryzen 9 5950X 3.40GHz, 1 CPU, 32 logical and 16 physical cores
.NET SDK 10.0.302
[Host] : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
Job-HTCPYF : .NET 10.0.10 (10.0.10, 10.0.1026.32716), X64 RyuJIT x86-64-v3
MaxIterationCount=10 MaxWarmupIterationCount=3 MinIterationCount=5
MinWarmupIterationCount=1
Read · open + set properties + save
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| NPOI |
NpoiReadBenchmarks |
OpenAmendPropertiesAndSave |
9.435 ms |
0.4471 ms |
0.2661 ms |
62.5000 |
31.2500 |
- |
1.9 MB |
| XLibur |
XLiburReadBenchmarks |
OpenAmendPropertiesAndSave |
16.848 ms |
0.9752 ms |
0.5101 ms |
- |
- |
- |
1.74 MB |
| EPPlus |
EpPlusReadBenchmarks |
OpenAmendPropertiesAndSave |
29.712 ms |
14.2888 ms |
8.5030 ms |
1000.0000 |
1000.0000 |
1000.0000 |
13.88 MB |
| ClosedXML |
ClosedXmlReadBenchmarks |
OpenAmendPropertiesAndSave |
38.373 ms |
3.4944 ms |
2.0795 ms |
666.6667 |
333.3333 |
- |
13.18 MB |
| IronXL â§— |
IronXlReadBenchmarks |
OpenAmendPropertiesAndSave |
208.746 ms |
155.7570 ms |
92.6885 ms |
9000.0000 |
2000.0000 |
- |
152.81 MB |
Read · open + read all cells
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| MiniExcel |
MiniExcelReadBenchmarks |
OpenAndReadAll |
694.313 ms |
11.6117 ms |
6.0732 ms |
39000.0000 |
4000.0000 |
1000.0000 |
629.69 MB |
| XLibur |
XLiburReadBenchmarks |
OpenAndReadAll |
1,128.882 ms |
22.0751 ms |
14.6013 ms |
13000.0000 |
10000.0000 |
2000.0000 |
308.54 MB |
| EPPlus |
EpPlusReadBenchmarks |
OpenAndReadAll |
1,220.576 ms |
28.9727 ms |
17.2412 ms |
49000.0000 |
14000.0000 |
7000.0000 |
925.23 MB |
| OpenXML SDK |
OpenXmlReadBenchmarks |
OpenAndReadAll |
1,255.792 ms |
20.4397 ms |
10.6903 ms |
40000.0000 |
6000.0000 |
1000.0000 |
628.84 MB |
| NPOI |
NpoiReadBenchmarks |
OpenAndReadAll |
2,618.664 ms |
175.0937 ms |
104.1954 ms |
68000.0000 |
62000.0000 |
6000.0000 |
1077.8 MB |
| ClosedXML |
ClosedXmlReadBenchmarks |
OpenAndReadAll |
6,522.648 ms |
125.7613 ms |
74.8385 ms |
59000.0000 |
23000.0000 |
3000.0000 |
1083.14 MB |
| IronXL â§— |
IronXlReadBenchmarks |
OpenAndReadAll |
9,318.107 ms |
477.3336 ms |
315.7266 ms |
393000.0000 |
202000.0000 |
10000.0000 |
6333.04 MB |
Write · create + save
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| MiniExcel |
MiniExcelWriteBenchmarks |
CreateAndSave |
61.120 ms |
1.9937 ms |
1.1864 ms |
5333.3333 |
1333.3333 |
1333.3333 |
84.59 MB |
| OpenXML SDK |
OpenXmlWriteBenchmarks |
CreateAndSave |
173.226 ms |
7.7930 ms |
5.1546 ms |
9000.0000 |
2333.3333 |
2333.3333 |
134.2 MB |
| XLibur |
XLiburWriteBenchmarks |
CreateAndSave |
246.227 ms |
13.3057 ms |
8.8009 ms |
3000.0000 |
2000.0000 |
2000.0000 |
60.51 MB |
| ClosedXML |
ClosedXmlWriteBenchmarks |
CreateAndSave |
414.639 ms |
12.1560 ms |
8.0405 ms |
10000.0000 |
5000.0000 |
2000.0000 |
181.09 MB |
| EPPlus |
EpPlusWriteBenchmarks |
CreateAndSave |
461.401 ms |
15.1523 ms |
10.0223 ms |
20000.0000 |
9000.0000 |
3000.0000 |
322.9 MB |
| NPOI |
NpoiWriteBenchmarks |
CreateAndSave |
722.667 ms |
14.1612 ms |
6.2877 ms |
16000.0000 |
12000.0000 |
3000.0000 |
247.46 MB |
| IronXL â§— |
IronXlWriteBenchmarks |
CreateAndSave |
943.137 ms |
18.5191 ms |
11.0204 ms |
48000.0000 |
16000.0000 |
3000.0000 |
797.63 MB |
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| OpenXML SDK |
OpenXmlReportBenchmarks |
CreateStockReport |
8.586 ms |
0.3742 ms |
0.2227 ms |
375.0000 |
359.3750 |
187.5000 |
4.92 MB |
| XLibur |
XLiburReportBenchmarks |
CreateStockReport |
9.993 ms |
0.6205 ms |
0.4104 ms |
187.5000 |
187.5000 |
187.5000 |
3.48 MB |
| EPPlus |
EpPlusReportBenchmarks |
CreateStockReport |
19.636 ms |
6.0135 ms |
3.9775 ms |
1000.0000 |
1000.0000 |
1000.0000 |
14 MB |
| ClosedXML |
ClosedXmlReportBenchmarks |
CreateStockReport |
22.178 ms |
4.7405 ms |
3.1355 ms |
428.5714 |
142.8571 |
- |
8.02 MB |
| NPOI |
NpoiReportBenchmarks |
CreateStockReport |
41.600 ms |
16.4198 ms |
10.8607 ms |
875.0000 |
750.0000 |
375.0000 |
16.26 MB |
| IronXL â§— |
IronXlReportBenchmarks |
CreateStockReport |
387.849 ms |
36.5456 ms |
24.1726 ms |
14000.0000 |
3000.0000 |
- |
237.38 MB |
Edit · delete rows + set column + recalculate
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| XLibur |
XLiburEditBenchmarks |
EditAndRecalculate |
12.706 ms |
0.2208 ms |
0.1155 ms |
250.0000 |
125.0000 |
- |
4.2 MB |
| OpenXML SDK |
OpenXmlEditBenchmarks |
EditAndRecalculate |
25.427 ms |
0.9302 ms |
0.5536 ms |
666.6667 |
500.0000 |
166.6667 |
9.8 MB |
| EPPlus |
EpPlusEditBenchmarks |
EditAndRecalculate |
100.826 ms |
14.9803 ms |
9.9085 ms |
9000.0000 |
1250.0000 |
1000.0000 |
142.49 MB |
| ClosedXML |
ClosedXmlEditBenchmarks |
EditAndRecalculate |
401.236 ms |
14.5991 ms |
9.6564 ms |
21000.0000 |
1000.0000 |
- |
337.77 MB |
| NPOI |
NpoiEditBenchmarks |
EditAndRecalculate |
404.613 ms |
8.8191 ms |
5.2481 ms |
25000.0000 |
1000.0000 |
- |
413.44 MB |
| IronXL â§— |
IronXlEditBenchmarks |
EditAndRecalculate |
1,577.273 ms |
62.9583 ms |
41.6430 ms |
57000.0000 |
36000.0000 |
15000.0000 |
753.86 MB |
Edit · insert 2 columns + recalculate
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| XLibur |
XLiburInsertBenchmarks |
InsertColumnsAndRecalculate |
15.302 ms |
0.5386 ms |
0.3563 ms |
281.2500 |
125.0000 |
- |
4.87 MB |
| EPPlus |
EpPlusInsertBenchmarks |
InsertColumnsAndRecalculate |
17.528 ms |
0.3238 ms |
0.1693 ms |
1000.0000 |
1000.0000 |
1000.0000 |
11.41 MB |
| OpenXML SDK |
OpenXmlInsertBenchmarks |
InsertColumnsAndRecalculate |
36.227 ms |
1.1224 ms |
0.7424 ms |
1076.9231 |
923.0769 |
384.6154 |
13.05 MB |
| ClosedXML |
ClosedXmlInsertBenchmarks |
InsertColumnsAndRecalculate |
43.333 ms |
17.3359 ms |
11.4666 ms |
800.0000 |
400.0000 |
- |
13.64 MB |
| NPOI |
NpoiInsertBenchmarks |
InsertColumnsAndRecalculate |
57.567 ms |
19.8877 ms |
13.1545 ms |
2000.0000 |
1400.0000 |
600.0000 |
30.72 MB |
| IronXL â§— |
IronXlInsertBenchmarks |
InsertColumnsAndRecalculate |
113.284 ms |
41.9750 ms |
27.7638 ms |
7000.0000 |
2500.0000 |
750.0000 |
104.88 MB |