.NET Systems Programming Learned the Hard Way
summary
Shows concrete wins and tradeoffs: switching to server GC doubles remote ping‑pong throughput (≈150k → ≈295k msg/s) at higher memory cost; pooling 1,024 StringBuilder instances cuts allocations from ~71MB to ~49.7MB and removes Gen‑1 GCs, increasing multithreaded throughput ≈28%; eliminating a captured delegate drops per‑op allocations from hundreds of kilobytes to ~1KB and raises throughput ~10%; using threadpool “prefer local” hints in .NET 6 raises actor throughput ~40M → ~65M msg/s; dynamic PGO pushes in‑memory actor rates ≈70M → ≈100M msg/s. Tools: BenchmarkDotNet, JetBrains profiler, PerfView.
AI-written summary · about
chapters (10)
- 0:00Introduction to Akka.net
- 2:21Understanding garbage collection
- 11:33Optimizing with memory pooling
- 14:53Server-side GC configuration
- 22:39Reducing delegate allocations
- 28:53Avoiding empty collections
- 31:50Value types vs reference types
- 43:02Threading and context switching
- 54:37Data structure synchronization
- 58:12Dynamic profile-guided optimization
related talks
01h 01mTurbocharged: Writing High-Performance C# and .NET Code
57mPushing C# to the limit
01h 00mPerformance Improvements in .NET 6
01h 04mTurbocharged: Writing High-Performance C# and .NET Code
01h 14mTurbocharged: Writing High-performance C# and .NET code
46mDeep dive into .NET performance and native AOT
47mUnlocking Performance Improvements in .NET
56mState of the .NET Performance
