BENCHMARKS

The same workloads, re-run on every .NET release, always on this machine. Head-to-head method comparisons, input-size scaling, and the release-over-release ledger. Suite and raw reports: github.com/gdhami-net/dotnet-benchmarks.

Intel Core Ultra 9 285HX · Windows 11 · BenchmarkDotNet 0.15.8 · SDK 10.0.201 · 2026-08-22 · single run — not yet median-of-N
Serialization

System.Text.Json (reflection and source-gen) vs Newtonsoft, both directions.

2 scenarios · 6 methods · best net10.0 move: -20% Stj_sourcegen
Strings & search

Building text and finding characters — the everyday hot paths.

2 scenarios · 6 methods · best net10.0 move: -11% Join_interpolation
Collections

Four lookup structures, hit and miss — including the case where every key is absent.

2 scenarios · 8 methods · best net10.0 move: -44% SortedArray_miss
LINQ & loops

The eternal for/foreach/LINQ argument, plus GroupBy vs CountBy.

2 scenarios · 7 methods · best net10.0 move: -19% CountBy_linq
Regex

One pattern, three engines: interpreted, compiled, source-generated.

1 scenarios · 3 methods · best net10.0 move: -6% SourceGen_regex
Async machinery

Task vs ValueTask overhead and channel throughput.

2 scenarios · 4 methods · best net10.0 move: -24% ValueTask_completed
Allocation & buffers

new vs ArrayPool vs stackalloc — the GC pressure trade.

1 scenarios · 3 methods · best net10.0 move: -0% ArrayPool_rent
Hashing & ids

Cryptographic vs non-cryptographic hashing; Guid v4 vs v7.

2 scenarios · 5 methods · best net10.0 move: -3% Guid_v7
Parsing

Integers and timestamps: Parse, TryParse, and byte-level variants.

2 scenarios · 6 methods · best net10.0 move: -7% Utf8Parser_bytes
Numerics & SIMD

Vectorized math: scalar loops vs hand-rolled SIMD vs TensorPrimitives.

2 scenarios · 5 methods · best net10.0 move: -2% Vector_simd
Reflection & DI

Creating objects and resolving services — the metaprogramming taxes.

2 scenarios · 6 methods · best net10.0 move: -28% Singleton_resolve
Encoding & buffers

UTF-8 and Base64: allocating paths vs buffer reuse.

2 scenarios · 4 methods · best net10.0 move: -20% GetBytes_alloc