Skip to content

Add benchmarks for reading 65K records across multiple Excel formats - #20

Merged
GabrielMarquezMatte merged 2 commits into
masterfrom
develop
Jul 8, 2026
Merged

Add benchmarks for reading 65K records across multiple Excel formats#20
GabrielMarquezMatte merged 2 commits into
masterfrom
develop

Conversation

@GabrielMarquezMatte

Copy link
Copy Markdown
Owner
  • Introduced new benchmark tests for reading a 65K-row dataset in various Excel formats (XLSX, XLSM, XLSB, XLS) and CSV.
  • Added the dataset files (65K_Records_Data.xls, 65K_Records_Data.xlsb, 65K_Records_Data.xlsm, 65K_Records_Data.xlsx) to the project.
  • Updated the project file to include the new data files in the output directory.
  • Implemented memory diagnostics and cell-by-cell reading comparisons between the ExcelReader and Sylvan libraries.

Gabriel Matte and others added 2 commits July 8, 2026 16:45
- Introduced new benchmark tests for reading a 65K-row dataset in various Excel formats (XLSX, XLSM, XLSB, XLS) and CSV.
- Added the dataset files (65K_Records_Data.xls, 65K_Records_Data.xlsb, 65K_Records_Data.xlsm, 65K_Records_Data.xlsx) to the project.
- Updated the project file to include the new data files in the output directory.
- Implemented memory diagnostics and cell-by-cell reading comparisons between the ExcelReader and Sylvan libraries.
@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 92.63158% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 92.16%. Comparing base (89df161) to head (22b39c7).

Files with missing lines Patch % Lines
...rc/ExcelReader.Core/Reader/CsvReader.Enumerator.cs 82.92% 4 Missing and 3 partials ⚠️
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #20      +/-   ##
==========================================
- Coverage   92.25%   92.16%   -0.09%     
==========================================
  Files          75       75              
  Lines        4738     4773      +35     
  Branches      820      825       +5     
==========================================
+ Hits         4371     4399      +28     
- Misses        213      217       +4     
- Partials      154      157       +3     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

Benchmark Results

Measured on ubuntu-latest (GitHub Actions). Runner noise may affect absolute numbers; use these for relative comparisons within a PR.

ExcelReader.Benchmarks.CsvParseBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio Gen0 Gen1 Allocated Alloc Ratio
ExcelParserSync 50000 8.456 ms 0.1052 ms 0.0273 ms 1.00 234.3750 - 3.86 MB 1.00
ExcelParserAsync 50000 10.107 ms 0.0443 ms 0.0069 ms 1.20 234.3750 - 3.86 MB 1.00
Sep 50000 9.529 ms 0.0414 ms 0.0064 ms 1.13 234.3750 - 3.87 MB 1.00
Sylvan 50000 13.061 ms 0.0588 ms 0.0153 ms 1.54 671.8750 93.7500 10.95 MB 2.84
CsvHelperLib 50000 24.755 ms 0.3735 ms 0.0970 ms 2.93 875.0000 93.7500 14.41 MB 3.73

ExcelReader.Benchmarks.CsvReadBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio Gen0 Gen1 Allocated Alloc Ratio
ExcelReader 50000 6.373 ms 0.0637 ms 0.0166 ms 1.00 - - 248 B 1.00
ExcelReaderAsync 50000 7.143 ms 0.0265 ms 0.0041 ms 1.12 - - 368 B 1.48
Sep 50000 9.153 ms 0.0234 ms 0.0061 ms 1.44 - - 4024 B 16.23
Sylvan 50000 4.687 ms 0.1023 ms 0.0266 ms 0.74 93.7500 7.8125 1688701 B 6,809.28
CsvHelperLib 50000 26.503 ms 0.1106 ms 0.0287 ms 4.16 875.0000 62.5000 15073424 B 60,779.94

ExcelReader.Benchmarks.CsvWriteBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio Gen0 Gen1 Gen2 Allocated Alloc Ratio
ExcelReaderWriter 50000 7.264 ms 0.0320 ms 0.0050 ms 1.00 984.3750 984.3750 984.3750 7 MB 1.00
Sep 50000 7.599 ms 0.1469 ms 0.0382 ms 1.05 1000.0000 992.1875 992.1875 4.01 MB 0.57
SylvanWriter 50000 7.558 ms 0.0980 ms 0.0152 ms 1.04 1000.0000 992.1875 992.1875 4.04 MB 0.58
CsvHelperLib 50000 17.594 ms 0.3009 ms 0.0466 ms 2.42 1562.5000 1031.2500 968.7500 13.79 MB 1.97

ExcelReader.Benchmarks.ParseBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 2.60GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio RatioSD Gen0 Allocated Alloc Ratio
ExcelParserSync 50000 28.77 ms 0.157 ms 0.024 ms 1.00 0.00 187.5000 3.87 MB 1.00
ExcelParserAsync 50000 31.57 ms 0.278 ms 0.072 ms 1.10 0.00 187.5000 3.88 MB 1.00
ExcelParserXlsbSync 50000 13.20 ms 0.105 ms 0.027 ms 0.46 0.00 234.3750 3.88 MB 1.00
ExcelParserXlsbAsync 50000 15.67 ms 0.090 ms 0.023 ms 0.54 0.00 218.7500 3.88 MB 1.00
MiniExcel 50000 224.72 ms 4.797 ms 0.742 ms 7.81 0.02 12000.0000 199.31 MB 51.44
Sylvan 50000 90.91 ms 65.114 ms 10.076 ms 3.16 0.31 - 10.47 MB 2.70
SylvanAsync 50000 96.18 ms 30.106 ms 7.818 ms 3.34 0.25 - 10.48 MB 2.70

ExcelReader.Benchmarks.ReadBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 9V74 3.68GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v4

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio RatioSD Gen0 Allocated Alloc Ratio
ExcelReader 50000 21.973 ms 0.1148 ms 0.0298 ms 1.00 0.00 - 12.49 KB 1.00
ExcelReaderAsync 50000 22.735 ms 0.0586 ms 0.0091 ms 1.03 0.00 - 14.51 KB 1.16
ExcelReaderXlsb 50000 4.983 ms 0.0379 ms 0.0098 ms 0.23 0.00 - 14.21 KB 1.14
ExcelReaderXlsbAsync 50000 5.701 ms 0.0276 ms 0.0072 ms 0.26 0.00 - 16.65 KB 1.33
MiniExcel 50000 161.729 ms 10.6719 ms 1.6515 ms 7.36 0.07 13000.0000 215587.88 KB 17,257.82
Sylvan 50000 44.011 ms 0.4681 ms 0.0724 ms 2.00 0.00 83.3333 1938.91 KB 155.21

ExcelReader.Benchmarks.WriteBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio RatioSD Gen0 Gen1 Gen2 Allocated Alloc Ratio
ExcelReaderWriter 50000 24.69 ms 0.116 ms 0.030 ms 1.00 0.00 375.0000 375.0000 375.0000 2.08 MB 1.00
ExcelReaderWriterSharedStrings 50000 23.66 ms 0.177 ms 0.027 ms 0.96 0.00 343.7500 343.7500 343.7500 2.08 MB 1.00
ExcelReaderXlsbWriter 50000 13.66 ms 0.193 ms 0.050 ms 0.55 0.00 62.5000 62.5000 62.5000 2.02 MB 0.97
ExcelReaderXlsbWriterSharedStrings 50000 13.21 ms 0.231 ms 0.036 ms 0.54 0.00 62.5000 62.5000 62.5000 2.02 MB 0.97
MiniExcel 50000 99.77 ms 7.436 ms 1.151 ms 4.04 0.04 6000.0000 2000.0000 2000.0000 85.14 MB 40.93
SpreadCheetah 50000 20.03 ms 0.322 ms 0.084 ms 0.81 0.00 1093.7500 468.7500 468.7500 12.32 MB 5.92

ExcelReader.Benchmarks.XlsReadBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 3.18GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio Gen0 Gen1 Allocated Alloc Ratio
ExcelReader 50000 7.634 ms 0.0671 ms 0.0174 ms 1.00 - - 58.2 KB 1.00
ExcelReaderAsync 50000 7.763 ms 0.0521 ms 0.0081 ms 1.02 - - 58.27 KB 1.00
Sylvan 50000 8.781 ms 0.0433 ms 0.0067 ms 1.15 93.7500 46.8750 1717.73 KB 29.51

ExcelReader.Benchmarks.XlsWriteBenchmark


BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763 3.18GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.301
  [Host]     : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3
  Job-MEHJPP : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3

IterationCount=5  WarmupCount=1  

Method Rows Mean Error StdDev Ratio Gen0 Gen1 Gen2 Allocated Alloc Ratio
XlsWriter 50000 9.772 ms 0.4087 ms 0.0632 ms 1.00 546.8750 421.8750 421.8750 12.37 MB 1.00
XlsxWriter 50000 23.152 ms 0.3150 ms 0.0488 ms 2.37 375.0000 375.0000 375.0000 2.08 MB 0.17

@GabrielMarquezMatte
GabrielMarquezMatte merged commit 74a3534 into master Jul 8, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants