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.
⚠️ Generated on a shared GitHub Actions runner — timings are indicative and vary run to run; allocation/memory figures are reliable. Authoritative timings come from a local run: results.html.
📈 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 different hardware — Windows 11 (10.0.22631.6199/23H2/2023Update/SunValley3), AMD Ryzen 9 5950X 16-Core Processor.
Libraries under test
| Library |
Version |
Source |
| ClosedXML |
0.105.1 |
this run |
| EPPlus |
8.7.1 |
this run |
| OpenXML SDK |
3.5.1 |
this run |
| NPOI |
2.8.1 |
this run |
| MiniExcel |
1.46.0 |
this run |
| Sylvan |
0.5.8 |
this run |
| XLibur |
0.630.1-rc.18 |
this run |
| OfficeIMO |
3.4.4 |
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 ["OpenXML SDK", "XLibur", "NPOI", "OfficeIMO", "EPPlus", "ClosedXML", "IronXL ⧗"]
y-axis "Time (ms)"
bar [0.41, 6.78, 13.45, 29.95, 43.98, 66.76, 208.75]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Read · open + set properties + save — allocated (MB)"
x-axis ["OpenXML SDK", "XLibur", "NPOI", "OfficeIMO", "ClosedXML", "EPPlus", "IronXL ⧗"]
y-axis "Allocated (MB)"
bar [0.34, 1.35, 1.89, 6.57, 13.17, 13.82, 152.81]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Read · open + read all cells — time (ms)"
x-axis ["Sylvan", "XLibur", "MiniExcel", "EPPlus", "OpenXML SDK", "NPOI", "OfficeIMO", "ClosedXML", "IronXL ⧗"]
y-axis "Time (ms)"
bar [376.85, 1099.89, 1128.47, 1585.24, 1623.92, 3680.22, 4179.13, 8749.08, 9318.11]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Read · open + read all cells — allocated (MB)"
x-axis ["Sylvan", "XLibur", "OpenXML SDK", "MiniExcel", "OfficeIMO", "EPPlus", "ClosedXML", "NPOI", "IronXL ⧗"]
y-axis "Allocated (MB)"
bar [25.28, 135.95, 627.82, 805.9, 823.25, 924.42, 1073.97, 1075.67, 6333.04]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Write · create + save — time (ms)"
x-axis ["Sylvan", "MiniExcel", "OpenXML SDK", "XLibur", "ClosedXML", "EPPlus", "NPOI", "IronXL ⧗", "OfficeIMO"]
y-axis "Time (ms)"
bar [47.03, 80.22, 219.74, 328.45, 526.24, 625.95, 907.42, 943.14, 1231.27]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Write · create + save — allocated (MB)"
x-axis ["Sylvan", "XLibur", "MiniExcel", "OpenXML SDK", "ClosedXML", "NPOI", "EPPlus", "OfficeIMO", "IronXL ⧗"]
y-axis "Allocated (MB)"
bar [13.27, 60.19, 84.59, 134.19, 181.09, 246.27, 322.56, 360.91, 797.63]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Report · data + conditional formatting + chart — time (ms)"
x-axis ["XLibur", "OpenXML SDK", "ClosedXML", "EPPlus", "NPOI", "OfficeIMO", "IronXL ⧗"]
y-axis "Time (ms)"
bar [10.77, 11.82, 22.47, 34.1, 55.57, 318.29, 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 ⧗", "OfficeIMO"]
y-axis "Allocated (MB)"
bar [3.35, 4.92, 8.01, 13.8, 16.28, 237.38, 904.72]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · delete rows + set column + recalculate — time (ms)"
x-axis ["XLibur", "OpenXML SDK", "EPPlus", "ClosedXML", "NPOI", "IronXL ⧗", "OfficeIMO"]
y-axis "Time (ms)"
bar [22.8, 36.13, 134.04, 486.39, 595.92, 1577.27, 3816.91]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · delete rows + set column + recalculate — allocated (MB)"
x-axis ["XLibur", "OpenXML SDK", "EPPlus", "ClosedXML", "NPOI", "OfficeIMO", "IronXL ⧗"]
y-axis "Allocated (MB)"
bar [2.68, 9.8, 142.5, 337.96, 413.38, 491.1, 753.86]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · insert 2 columns + recalculate — time (ms)"
x-axis ["XLibur", "EPPlus", "OpenXML SDK", "NPOI", "ClosedXML", "IronXL ⧗", "OfficeIMO"]
y-axis "Time (ms)"
bar [12.1, 35.15, 47.45, 66.92, 74.81, 113.28, 272.28]
---
config:
xyChart:
showDataLabel: true
---
xychart-beta
title "Edit · insert 2 columns + recalculate — allocated (MB)"
x-axis ["XLibur", "EPPlus", "OpenXML SDK", "ClosedXML", "NPOI", "OfficeIMO", "IronXL ⧗"]
y-axis "Allocated (MB)"
bar [2.71, 11.45, 13.04, 13.69, 30.74, 66.63, 104.88]
Detailed results
BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.5 LTS (Noble Numbat)
AMD EPYC 7763 2.93GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.401
[Host] : .NET 10.0.12 (10.0.12, 10.0.1226.42308), X64 RyuJIT x86-64-v3
ShortRun : .NET 10.0.12 (10.0.12, 10.0.1226.42308), X64 RyuJIT x86-64-v3
Job=ShortRun IterationCount=3 LaunchCount=1
WarmupCount=3
Read · open + set properties + save
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Median |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| OpenXML SDK |
OpenXmlReadBenchmarks |
OpenAmendPropertiesAndSave |
0.4070 ms |
1.2531 ms |
0.0687 ms |
0.3994 ms |
27.3438 |
16.6016 |
13.6719 |
0.34 MB |
| XLibur |
XLiburReadBenchmarks |
OpenAmendPropertiesAndSave |
6.7849 ms |
0.5003 ms |
0.0274 ms |
6.7725 ms |
70.3125 |
31.2500 |
- |
1.35 MB |
| NPOI |
NpoiReadBenchmarks |
OpenAmendPropertiesAndSave |
13.4498 ms |
9.9116 ms |
0.5433 ms |
13.2501 ms |
62.5000 |
- |
- |
1.89 MB |
| OfficeIMO |
OfficeImoReadBenchmarks |
OpenAmendPropertiesAndSave |
29.9473 ms |
5.6672 ms |
0.3106 ms |
29.9888 ms |
437.5000 |
312.5000 |
312.5000 |
6.57 MB |
| EPPlus |
EpPlusReadBenchmarks |
OpenAmendPropertiesAndSave |
43.9755 ms |
141.5122 ms |
7.7568 ms |
42.3812 ms |
1000.0000 |
1000.0000 |
1000.0000 |
13.82 MB |
| ClosedXML |
ClosedXmlReadBenchmarks |
OpenAmendPropertiesAndSave |
66.7563 ms |
538.0596 ms |
29.4929 ms |
50.4908 ms |
750.0000 |
250.0000 |
- |
13.17 MB |
| IronXL ⧗ |
IronXlReadBenchmarks |
OpenAmendPropertiesAndSave |
208.746 ms |
155.7570 ms |
92.6885 ms |
168.705 ms |
9000.0000 |
2000.0000 |
- |
152.81 MB |
Read · open + read all cells
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Median |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| Sylvan |
SylvanReadBenchmarks |
OpenAndReadAll |
376.8518 ms |
30.8496 ms |
1.6910 ms |
377.1237 ms |
1000.0000 |
- |
- |
25.28 MB |
| XLibur |
XLiburReadBenchmarks |
OpenAndReadAll |
1,099.8894 ms |
87.5451 ms |
4.7986 ms |
1,101.2648 ms |
8000.0000 |
5000.0000 |
1000.0000 |
135.95 MB |
| MiniExcel |
MiniExcelReadBenchmarks |
OpenAndReadAll |
1,128.4704 ms |
31.5495 ms |
1.7293 ms |
1,127.9282 ms |
51000.0000 |
4000.0000 |
1000.0000 |
805.9 MB |
| EPPlus |
EpPlusReadBenchmarks |
OpenAndReadAll |
1,585.2425 ms |
70.4030 ms |
3.8590 ms |
1,583.4909 ms |
49000.0000 |
14000.0000 |
7000.0000 |
924.42 MB |
| OpenXML SDK |
OpenXmlReadBenchmarks |
OpenAndReadAll |
1,623.9155 ms |
57.1800 ms |
3.1342 ms |
1,624.0045 ms |
40000.0000 |
6000.0000 |
1000.0000 |
627.82 MB |
| NPOI |
NpoiReadBenchmarks |
OpenAndReadAll |
3,680.2191 ms |
4,739.8055 ms |
259.8047 ms |
3,826.9349 ms |
67000.0000 |
62000.0000 |
6000.0000 |
1075.67 MB |
| OfficeIMO |
OfficeImoReadBenchmarks |
OpenAndReadAll |
4,179.1309 ms |
214.5208 ms |
11.7586 ms |
4,179.8685 ms |
53000.0000 |
39000.0000 |
5000.0000 |
823.25 MB |
| ClosedXML |
ClosedXmlReadBenchmarks |
OpenAndReadAll |
8,749.0819 ms |
82.8778 ms |
4.5428 ms |
8,747.9861 ms |
60000.0000 |
24000.0000 |
4000.0000 |
1073.97 MB |
| IronXL ⧗ |
IronXlReadBenchmarks |
OpenAndReadAll |
9,318.107 ms |
477.3336 ms |
315.7266 ms |
9,377.407 ms |
393000.0000 |
202000.0000 |
10000.0000 |
6333.04 MB |
Write · create + save
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Median |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| Sylvan |
SylvanWriteBenchmarks |
CreateAndSave |
47.0259 ms |
0.9655 ms |
0.0529 ms |
47.0564 ms |
1818.1818 |
1727.2727 |
1545.4545 |
13.27 MB |
| MiniExcel |
MiniExcelWriteBenchmarks |
CreateAndSave |
80.2195 ms |
13.5758 ms |
0.7441 ms |
79.8768 ms |
5428.5714 |
1571.4286 |
1428.5714 |
84.59 MB |
| OpenXML SDK |
OpenXmlWriteBenchmarks |
CreateAndSave |
219.7435 ms |
61.0317 ms |
3.3454 ms |
218.2425 ms |
9000.0000 |
2333.3333 |
2333.3333 |
134.19 MB |
| XLibur |
XLiburWriteBenchmarks |
CreateAndSave |
328.4532 ms |
1,375.1547 ms |
75.3769 ms |
318.9854 ms |
3000.0000 |
2000.0000 |
2000.0000 |
60.19 MB |
| ClosedXML |
ClosedXmlWriteBenchmarks |
CreateAndSave |
526.2406 ms |
32.0362 ms |
1.7560 ms |
525.8548 ms |
10000.0000 |
5000.0000 |
2000.0000 |
181.09 MB |
| EPPlus |
EpPlusWriteBenchmarks |
CreateAndSave |
625.9491 ms |
59.2440 ms |
3.2474 ms |
625.9453 ms |
20000.0000 |
9000.0000 |
3000.0000 |
322.56 MB |
| NPOI |
NpoiWriteBenchmarks |
CreateAndSave |
907.4161 ms |
49.3967 ms |
2.7076 ms |
907.3407 ms |
16000.0000 |
12000.0000 |
3000.0000 |
246.27 MB |
| IronXL ⧗ |
IronXlWriteBenchmarks |
CreateAndSave |
943.137 ms |
18.5191 ms |
11.0204 ms |
938.999 ms |
48000.0000 |
16000.0000 |
3000.0000 |
797.63 MB |
| OfficeIMO |
OfficeImoWriteBenchmarks |
CreateAndSave |
1,231.2676 ms |
665.0928 ms |
36.4560 ms |
1,215.1720 ms |
19000.0000 |
14000.0000 |
3000.0000 |
360.91 MB |
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Median |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| XLibur |
XLiburReportBenchmarks |
CreateStockReport |
10.7704 ms |
2.6399 ms |
0.1447 ms |
10.8281 ms |
187.5000 |
187.5000 |
187.5000 |
3.35 MB |
| OpenXML SDK |
OpenXmlReportBenchmarks |
CreateStockReport |
11.8208 ms |
0.2803 ms |
0.0154 ms |
11.8223 ms |
375.0000 |
359.3750 |
187.5000 |
4.92 MB |
| ClosedXML |
ClosedXmlReportBenchmarks |
CreateStockReport |
22.4718 ms |
1.9950 ms |
0.1094 ms |
22.4213 ms |
468.7500 |
343.7500 |
187.5000 |
8.01 MB |
| EPPlus |
EpPlusReportBenchmarks |
CreateStockReport |
34.0972 ms |
64.3533 ms |
3.5274 ms |
35.1543 ms |
1000.0000 |
1000.0000 |
1000.0000 |
13.8 MB |
| NPOI |
NpoiReportBenchmarks |
CreateStockReport |
55.5662 ms |
188.5598 ms |
10.3356 ms |
55.4298 ms |
833.3333 |
666.6667 |
333.3333 |
16.28 MB |
| OfficeIMO |
OfficeImoReportBenchmarks |
CreateStockReport |
318.2948 ms |
90.4563 ms |
4.9582 ms |
316.1960 ms |
56000.0000 |
2000.0000 |
- |
904.72 MB |
| IronXL ⧗ |
IronXlReportBenchmarks |
CreateStockReport |
387.849 ms |
36.5456 ms |
24.1726 ms |
384.092 ms |
14000.0000 |
3000.0000 |
- |
237.38 MB |
Edit · delete rows + set column + recalculate
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Median |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| XLibur |
XLiburEditBenchmarks |
EditAndRecalculate |
22.8029 ms |
124.2535 ms |
6.8108 ms |
21.6872 ms |
125.0000 |
- |
- |
2.68 MB |
| OpenXML SDK |
OpenXmlEditBenchmarks |
EditAndRecalculate |
36.1340 ms |
6.1421 ms |
0.3367 ms |
36.1166 ms |
400.0000 |
200.0000 |
- |
9.8 MB |
| EPPlus |
EpPlusEditBenchmarks |
EditAndRecalculate |
134.0415 ms |
102.4944 ms |
5.6181 ms |
130.9196 ms |
9000.0000 |
1333.3333 |
1000.0000 |
142.5 MB |
| ClosedXML |
ClosedXmlEditBenchmarks |
EditAndRecalculate |
486.3941 ms |
29.4579 ms |
1.6147 ms |
486.2484 ms |
21000.0000 |
1000.0000 |
- |
337.96 MB |
| NPOI |
NpoiEditBenchmarks |
EditAndRecalculate |
595.9224 ms |
106.8512 ms |
5.8569 ms |
598.1229 ms |
25000.0000 |
1000.0000 |
- |
413.38 MB |
| IronXL ⧗ |
IronXlEditBenchmarks |
EditAndRecalculate |
1,577.273 ms |
62.9583 ms |
41.6430 ms |
1,583.098 ms |
57000.0000 |
36000.0000 |
15000.0000 |
753.86 MB |
| OfficeIMO |
OfficeImoEditBenchmarks |
EditAndRecalculate |
3,816.9110 ms |
48.5104 ms |
2.6590 ms |
3,816.3397 ms |
30000.0000 |
1000.0000 |
- |
491.1 MB |
Edit · insert 2 columns + recalculate
| Library |
Type |
Method |
Mean |
Error |
StdDev |
Median |
Gen0 |
Gen1 |
Gen2 |
Allocated |
| XLibur |
XLiburInsertBenchmarks |
InsertColumnsAndRecalculate |
12.1034 ms |
0.6080 ms |
0.0333 ms |
12.1151 ms |
156.2500 |
62.5000 |
- |
2.71 MB |
| EPPlus |
EpPlusInsertBenchmarks |
InsertColumnsAndRecalculate |
35.1538 ms |
133.0260 ms |
7.2916 ms |
32.3655 ms |
1000.0000 |
1000.0000 |
1000.0000 |
11.45 MB |
| OpenXML SDK |
OpenXmlInsertBenchmarks |
InsertColumnsAndRecalculate |
47.4502 ms |
9.5253 ms |
0.5221 ms |
47.5155 ms |
750.0000 |
500.0000 |
250.0000 |
13.04 MB |
| NPOI |
NpoiInsertBenchmarks |
InsertColumnsAndRecalculate |
66.9183 ms |
294.5354 ms |
16.1445 ms |
58.1650 ms |
2000.0000 |
1400.0000 |
600.0000 |
30.74 MB |
| ClosedXML |
ClosedXmlInsertBenchmarks |
InsertColumnsAndRecalculate |
74.8128 ms |
242.6997 ms |
13.3032 ms |
70.2772 ms |
666.6667 |
333.3333 |
- |
13.69 MB |
| IronXL ⧗ |
IronXlInsertBenchmarks |
InsertColumnsAndRecalculate |
113.284 ms |
41.9750 ms |
27.7638 ms |
97.052 ms |
7000.0000 |
2500.0000 |
750.0000 |
104.88 MB |
| OfficeIMO |
OfficeImoInsertBenchmarks |
InsertColumnsAndRecalculate |
272.2814 ms |
175.0047 ms |
9.5926 ms |
271.0058 ms |
3000.0000 |
1000.0000 |
- |
66.63 MB |