Programming

.NET 8 vs .NET 10: Benchmarking the Runtime BigInteger arithmetic, Concurrency and parallelism, CPU-heavy workloads, Cryptographic hashing

#.NET#CSharp#Benchmark

bigint-crypto-json.png

.NET 8 vs .NET 10: Benchmarking the Runtime Where It Actually Matters 🚀

Performance claims are easy to make and hard to verify.

With the release of .NET 10 , I wanted to move past release notes and headlines and answer a simple question:

What actually gets faster, what stays the same, and what slows down?

To find out, I ran a series of focused benchmarks comparing .NET 8 and .NET 10, using the same code, same inputs, and the same BenchmarkDotNet setup. No tricks. No cherry-picking.

This article covers four low-level areas that show real runtime behavior:

BigInteger arithmetic

Concurrency and parallelism

CPU-heavy workloads

Cryptographic hashing

These are not framework features. These are the foundations your applications sit on.

🧪 Benchmark Setup

All benchmarks were executed using BenchmarkDotNet, with identical configurations across runtimes.

What stayed constant:

Same algorithms

Same inputs

Same machine

Same iteration strategy

What changed:

Runtime only (.NET 8 vs .NET 10)

This means differences you see are almost entirely runtime-related.

⚠️ As always, results are environment-dependent. Use these numbers as signals, not absolute truth.

🔢 1. BigInteger Arithmetic

📸 Suggested image: Bar chart comparing .NET 8 vs .NET 10 BigInteger operations

BigInteger operations show one of the clearest improvements.

Results Summary

Division: +33.8% faster

Multiplication: +3.5% faster

ModPow: ~flat

No extra allocations. No behavioral changes. Just faster execution.

Why this matters

BigInteger shows up in more places than people realize:

Cryptography

Financial calculations

Scientific workloads

Blockchain-related logic

A 33% speedup in division is not noise. That’s a real improvement that compounds quickly in tight loops.

Takeaway: .NET 10 clearly improves parts of BigInteger arithmetic, especially division-heavy paths.

🧵 2. Concurrency and Parallelism

📸 Suggested image: Threaded execution diagram with speed arrows

Concurrency results are mixed, and that’s a good thing. Honest benchmarks should show this.

Results Summary

AsyncTask: ~1% slower (effectively unchanged)

Parallel.For: +38% faster

What’s going on here?

Async workloads depend heavily on scheduling, timers, and context switching. Small changes can easily land within noise.

Parallel.For, however, benefits from improvements in work partitioning and scheduling. A 38% improvement suggests meaningful runtime-level gains.

Takeaway: If your workload is CPU-bound and parallelized, .NET 10 can make a noticeable difference.

🧠 3. CPU-Heavy Workloads

📸 Suggested image: CPU chip with benchmark bars

This category had both wins and losses.

Results Summary

JSON Deserialize: +33.4%

JSON Serialize: +31.6%

Matrix Multiplication: -14.5%

SHA256: -2.6%

Interpreting this correctly

JSON improvements are excellent news. These paths are everywhere:

APIs

Messaging

Background jobs

Data pipelines

Matrix multiplication slowing down is a reminder that not every optimization benefits every algorithm. CPU-bound math can be sensitive to instruction selection and codegen changes.

Takeaway: .NET 10 is faster for common data processing paths, but not universally faster for all numeric workloads.

🔐 4. Cryptographic Hashing

📸 Suggested image: Lock or shield icon with performance bars

Crypto performance stayed mostly stable.

Results Summary

SHA256: +0.4%

SHA512: +1.3%

HMACSHA256: +0.7%

No regressions. No surprises.

Why small gains still matter

Crypto code is heavily optimized already. Even small improvements often require deep runtime or instruction-level work.

Stability here is a win.

Takeaway: Cryptographic hashing in .NET 10 is steady and slightly improved, which is exactly what you want.

🧩 Overall Conclusions

After running these benchmarks, a few patterns stand out clearly:

✅ .NET 10 delivers real, measurable improvements ⚠️ Gains are workload-dependent 🧪 Some regressions exist and should be acknowledged 📉 Allocation behavior remains mostly unchanged 🧠 There is no single “.NET 10 is X% faster” number

What .NET 10 does well is improve hot paths without breaking fundamentals. That’s how a mature runtime should evolve.

🛠️ Final Thought

Benchmarks don’t tell you what will be faster in your app. They tell you where to look closer.

If performance matters to you, run your own benchmarks. Measure what you actually ship. That’s where the real answers live.

If you’d like access to the benchmark code or want to compare results on your own machine, feel free to reach out.

Happy benchmarking 🔍

Comments (0)

Log in or Register to leave a comment.

No comments yet. Be the first to share your thoughts!