Originally published on PrepStack. Cross-posting the TL;DR here.
We run a multi-tenant analytics SaaS on ASP.NET Core (~110k MAU, ~3,200 req/sec peak, ~95k LOC) and benchmarked .NET 9, .NET 10 (current LTS), and .NET 11 previews on the same harness and the same production workload — not synthetic microbenchmarks.
The numbers (9 -> 10, GA, near-zero code changes)
| Metric | .NET 9 | .NET 10 (GA) | .NET 11 (preview) |
|---|---|---|---|
| Throughput / instance | baseline | +11% | +6-9% (early) |
| API p95 | 132 ms | 120 ms | -5-7% (early) |
| Working set / instance | 415 MB | 380 MB | a few MB less |
| AOT cold start | 84 ms | 61 ms | ~55 ms (early) |
| AOT image size | 41 MB | 33 MB | ~30 MB (early) |
| Language | C# 13 | C# 14 | C# 15 (preview) |
What it covers
- Runtime/JIT free wins (AVX10.2, devirtualization, loop opts)
- GC/memory (DATAS right-sizing the heap)
- ASP.NET Core built-in OpenAPI + minimal-API validation
- C# 14: the
fieldkeyword + extension members (~700 LOC deleted) - Native AOT startup & container size
-
Microsoft.Extensions.AIbecoming first-class - The actual 9 -> 10 migration (~1.5 engineer-days for 95k LOC)
Verdict: upgrade to the LTS for the free, measured wins; pilot the .NET 11 preview in CI, ship after GA (Nov 2026). And benchmark your hot paths — generic benchmarks don't reflect your workload.
Full post with before/after code and the decision checklist: https://prepstack.co.in/blog/dotnet-11-vs-dotnet-10-benchmarked-production
Top comments (0)