Independent performance benchmarks for MiniExcel, migrated from that repository with the original Apache-2.0 license and authorship preserved. Historical results are in benchmarks/results. They describe their original runs, not necessarily the pinned source version.
This repository is separate from MiniExcel's regular unit tests and release artifacts. Neither benchmark project is packable. Moving comparison code here does not exempt users from third-party licenses or constitute ASF approval.
git clone --recurse-submodules https://github.com/mini-software/MiniExcel.Benchmarks.git
cd MiniExcel.Benchmarks
git submodule statusThe MiniExcel submodule pins the source under test, initially
323e156bd51a3c071f81dcf9102d48f20545439e. Benchmarks reference only its production
projects, not its tests or historical benchmark projects. No NuGet version is
silently substituted. To measure a different commit:
git -C MiniExcel fetch origin
git -C MiniExcel checkout <commit>
git submodule statusRecord that commit alongside results and commit the updated submodule pointer when intentionally updating the baseline.
Install the .NET SDKs required by the projects (currently .NET 10 and 11). Run from this repository's root:
dotnet build MiniExcel.Benchmarks.slnx -c Release
dotnet run --project benchmarks\MiniExcel.Benchmarks -c Release -f net10.0 -- --filter '*QueryExcelBenchmark.MiniExcel_Query'The default solution does not restore EPPlus or NPOI. The regular project also
compares ClosedXML, ExcelDataReader and OpenXML SDK. Select creation and template
benchmarks with '*CreateExcelBenchmark*' and '*TemplateExcelBenchmark*'.
Run baseline and changed versions on the same machine.
Its project file is named MiniExcel.PerformanceBenchmarks.csproj to avoid a
BenchmarkDotNet project-discovery collision with historical benchmark projects
inside the pinned MiniExcel submodule.
If only .NET 10 is installed, limit restore/build to that framework:
dotnet run --project benchmarks\MiniExcel.Benchmarks -c Release -f net10.0 -p:TargetFrameworks=net10.0 -- --list flatThe default job uses one launch, three warmups and three measurement iterations.
For changes around 10%, add --iterationCount 15 --launchCount 3.
The original benchmark guide describes
peak-memory measurement.
Read the license and opt-in instructions before restoring or running the comparison project. EPPlus 7.7.3 and NPOI 2.8.0 remain isolated there; they are not dependencies of the default solution. No license acknowledgements are committed or enabled by CI.
The migrated workflow runs regular benchmarks and records their results. It checks out the pinned submodule and does not run the optional comparisons.