A curated list of awesome .NET Performance books, courses, trainings, conference talks, blogs and most inspiring open source contributors. Inspired by awesome-... stuff.
- Awesome .NET Performance
- Pro .NET Performance: Optimize Your C# Applications by Sasha Goldshtein, Dima Zurbalev, Ido Flatow
- Pro .NET Memory Management: For Better Code, Performance, and Scalability by Konrad Kokosa
- Pro .NET Benchmarking: The Art of Performance Measurement by Andrey Akinshin
- CLR via C# by Jeffrey Richter
- Pro Asynchronous Programming with .NET by Richard Blewett, Andrew Clymer
- Writing High-Performance .NET Code by Ben Watson
- Advanced .NET Debugging by Mario Hewardt
- Concurrent Programming on Windows by Joe Duffy
- .NET IL Assembler by Serge Lidin
- High-Performance Windows Store Apps by Brian Rasmussen
- Customizing the Microsoft® .NET Framework Common Language Runtime by Steven Pratschner
- Under the Hood of .NET Memory Management by Chris Farrell and Nick Harrison
- Functional Concurrency in .NET by Riccardo Terrell
- Mastering .NET Performance Tuning by John Robbins
- Using Threads Effectively to Build Scalable, Responsive, and Fast .NET Applications and Components by Jeffrey Richter
- Making .NET Applications Faster by Sasha Goldshtein
- Making .NET Applications Even Faster by Sasha Goldshtein
- Measuring .NET Performance by Sasha Goldshtein
- PerfView Tutorial by Vance Morrison
- Defrag Tools - Perf View by Vance Morrison
- High Performance Coding with .NET Core and C# by Gergely Kalapos
- Defrag tools about CLR GC part 1 part 2 part 3 and part 4 with Maoni Stephens
- .NET Performance and Debugging Workshop by SELA (Israel)
- .NET Performance by SELA (Israel)
- Asynchronous Computing and Composing Asynchronous and Event-Based by SELA (Israel)
- Parallel Programming with the TPL by SELA (Israel)
- Solid Async in .NET by Rock Solid Knowledge (UK)
- Mastering .NET Performance Tuning by Wintellect (USA)
- Mastering .NET Threading by Wintellect (USA)
- 2020
- Dotnetos - .NET Performance World - Two-day conference dedicated solely to .NET performance! Both international and Polish speakers (all sessions in English). Chance to meet well-known people from .NET performance area in person. (01-02 October 2020, Warsaw)
Sorted from newest to oldest:
- 2019
- Compiling and Running a PHP on .NET Core by Jakub Míšek, (11.10.2019, Dotnetos Conference)
- Ethereum performance in .NET Core by Tomasz Stanczak, Piotr Gankiewicz, (11.10.2019, Dotnetos Conference)
- To ORM or not to ORM by Łukasz Dziekan, (11.10.2019, Dotnetos Conference)
- Writing Allocation Free Code in C# by Matt Ellis, (11.10.2019, Dotnetos Conference)
- Cliff diving into async in .NET Core and C# 8 by Daniel Marbach, (11.10.2019, Dotnetos Conference)
- Performance Testing by Andrey Akinshin, (10.10.2019, Dotnetos Conference)
- How Entity Framework translates LINQ all the way to SQL by Shay Rojansky, (10.10.2019, Dotnetos Conference)
- .NET Intrinsics in CoreCLR 3.0 by Dan Schechter, (10.10.2019, Dotnetos Conference)
- The .NET Garbage Collector by Peter Sollich, (10.10.2019, Dotnetos Conference)
- .NET Performance Investigation by Adam Sitnik, (10.10.2019, Dotnetos Conference)
- Performance in the .NET Runtime by Matt Warren, (10.10.2019, Dotnetos Conference)
- Spanification by Adam Sitnik (09.09.2019, Update Conference Prague)
- JIT and AOT in the CLR by Mei-Chin Tsai (30.07.2019, JVM Language Summit)
- Powerful benchmarking in .NET by Adam Sitnik (09.07.2019, Update Conference Prague)
- What’s new for performance in .NET Core and ASP.NET Core 3.0 by Ben Adams (08.07.2019, .NET Core Summer Event)
- Ref struct, ref readonly struct, ref returning, ref everything! by Konrad Kokosa (04.06.2019, DotNext)
- Building responsive and scalable applications by Jeffrey Richter (26.03.2019, DotNext)
- Make your custom .NET GC — "whys" and "hows" by Konrad Kokosa (18.03.2019, DotNext)
- Extend the new WinDbg to build your own dream debugging tool by Kevin Gosse (18.03.2019, DotNext)
- Tuning a Runtime for Both Productivity and Performance by Mei-Chin Tsai (26.02.2019, QCon)
- 2018
- Efficient Buffer Manipulation using C# 7.2's Span by Jeffrey Richter (28.11.2018, SPB .NET Meetup)
- Building your own debugging toolbox with ClrMD by Christophe Nasarre (28.11.2018, DotNext)
- Scratched metal by Federico Lois (26.10.2018, DotNext)
- PerfView: The Ultimate .NET Performance Tool by Sasha Goldshtein (27.08.2018, QCon)
- Advanced .NET debugging techniques from a real world investigation by Christophe Nasarre & Kevin Gosse (21.08.2018, DotNext)
- Patterns for high-performance C# by Federico Lois (08.02.2018, DotNext)
- 2017
- What's new for performance in .NET Core 2.0 by Ben Adams (2017.11.09, CORESTART 2.0)
- State of the .NET Performance by Adam Sitnik (2017.07.05, NDC)
- Look Mommy, No GC! by Dina Goldshtein (2017.03.23, NDC)
- Squeezing the Hardware to Make Performance Juice by Sasha Goldshtein (2017.03.17, DotNext)
- Performance tuning Stack Overflow tags by Marco Cecconi (2017.03.17, DotNext)
- Multithreading Deep Dive by Gael Fraiteur (2017.03.17, DotNext)
- Stack Overflow — It's all about performance! by Marco Cecconi (2017.03.17, DotNext)
- ETW — Monitor Anything, Anytime, Anywhere by Dina Goldshtein (2017.03.17, DotNext)
- Exceptional Exceptions in .NET by Adam Sitnik (2017.03.17, DotNext)
- 2016
- PerfView: Measure and Improve Your App's Performance For Free by Sasha Goldshtein (2016.11.02, DotNext)
- The C++ and CLR Memory Models by Sasha Goldshtein (2016.11.02, DotNext)
- Safe Systems Programming in C# and .NET by Joe Duffy (2016.08.20, QCon)
- ASP.NET Core Kestrel: Adventures in building a fast web server by Damian Edwards & David Fowler (2016.08.12, NDC)
- Performance and How to Measure It by Matt Warren (2016.07.28, ProgSCon)
- Performance Optimizations in the Wild by Oren Eini (Ayende) (2016.06.23, NDC)
- The Vector in Your CPU: Exploiting SIMD for Superscalar Performance by Sasha Goldshtein (2016.04.19, DotNext)
- Lessons in Extreme .NET Performance by Ben Watson (2016.03.13, QCon)
- Older
- Making .NET applications faster by Sasha Goldshtein (2015.10.30, DevWeek)
- The zen of async: Best practices for best performance by Stephen Toub (2011.09.13, Build)
- Maoni Stephens
- Stephen Toub
- Matt Warren
- Andrey Akinshin
- Dan Shechter
- Egor Bogatov
- Oren Eini aka Ayende
- Alexandre Mutel aka xoofx
- Vladimir Sadov
- Adam Sitnik
- Konrad Kokosa
- Ben Adams
- Jan Kotas
- Stephen Toub
- mikedn
- Tanner Gooding
- Vladimir Sadov
- Dan Shechter
- Egor Bogatov
- Federico Andres Lois
- Konrad Kokosa
- nietras
- BenchmarkDotNet - Powerful .NET library for benchmarking.
- NBench - Cross-platform performance benchmarking and testing framework for .NET applications.
- Prefix - Free lightweight profiler for ASP.NET apps shows everything your code is doing across 30+ common libraries
- MiniProfiler - Free profiling tool for .NET applications with Entity Framework and ASP.Net integration (Core supported for both versions)
- dotTrace - Paid profiler for .NET applications from the JetBrains team, included in the Resharper Ultimate package
- App Metrics - App Metrics is an open-source and cross-platform .NET library used to record and report metrics within an application and reports it's health. See the docs for more details.
- Mathematics
- MathNet - Math.NET is an opensource initiative to build and maintain toolkits covering fundamental mathematics, targetting advanced but also every day needs of .Net developers.
- Spreads - "Series and Panels for Real-time and Exploratory Analysis of Data Streams", a library for fast time series incremental calculations + SIMD-optimized byte-shuffling/LZ4/Zstd compression using Blosc library.
- CPU Optimization
- SIMD Array - SIMD and other Performance enhanced Array operations for F#.
- NativeInterop - Generic pointers and native 64-bit arrays for .NET.
- IO Optimization
- Nessos Streams - A lightweight F#/C# library for efficient functional-style pipelines on streams of data.
- Wire - A high performance polymorphic serializer for the .NET framework.
- Disruptor-Net - .NET port of LMAX Disruptor, a faster alternative to BlockingCollection.
- MPMCQueue.NET - Bounded multiple producers multiple consumers queue for .NET.
- Collections
- ImTools - Immutable persistent collections and helpers designed for performance and simplicity of use.
- Parsing and Compiling
- markdig - Markdig is a fast, powerful, CommonMark compliant, extensible Markdown processor for .NET.
- FastExpressionCompiler - Fast Expression Trees compiler to delegate to compensate for slow
Expression.Compile()
.
- Inversion of Control frameworks
- DryIoc - For the past years a fastest Dependency Injection library without sacrificing on functionality.
- SimpleInjector - Fast Dependency Injection library that promotes best practice to steer developers towards the pit of success.
- Microbenchmark Design Guidelines by Adam Sitnik
- The Art of Benchmarking by Matt Warren
- Adventures in Benchmarking - Memory Allocations by Matt Warren
- Micro-Benchmarking Done Wrong, And For The Wrong Reasons by Sasha Goldshtein
- Stopwatch under the hood by Andrey Akinshin
- DateTime under the hood by Andrey Akinshin
- Benchmarking made easy by Jon Skeet
- Simple microbenchmarking in C# by Jon Skeet
- Acquiring high-resolution time stamps
- On ‘stackalloc’ Performance and The Large Object Heap by Sasha Goldshtein
- Micro-Benchmarking Considered Harmful by Sasha Goldshtein
- On Measuring Performance by Sasha Goldshtein
- Performance exercise: Minimum by Andrey Akinshin
- Performance exercise: Division by Andrey Akinshin
- Measuring Performance Improvements in .NET Core with BenchmarkDotNet (Part 1) by Andrey Akinshin
- Performance Counters Hell by Criteo Labs
- Replace .NET performance counters by CLR event tracing by Criteo Labs
- Grab ETW Session, Providers and Events by Criteo Labs
- Monitor Finalizers, contention and threads in your application by Criteo Labs
- In-process CLR event listeners with .NET Core 2.2 by Christophe Nasarre
- Spying on .NET Garbage Collector with TraceEvent by Christophe Nasarre
- High-performance .NET by example: Filtering bot traffic by Alexandr Nikitin
- RyuJIT and the never-ending ThreadAbortException by Criteo Labs
- 9 posts about how to build your own toolbox with ClrMD by Criteo Labs
- .NET Threadpool starvation, and how queuing makes it worse by Criteo Labs
- Get-process-name challenge on a Friday afternoon by Christophe Nasarre
- All .NET Debugging Demos: Hang, Crash, memory, and CPU
- Reader email: Need help troubleshooting perf/memory issues
- Debugging a classic ReaderWriterLock deadlock with SOSex.dll
- New commands in SOS for .NET 4.0 Part 1
- High CPU in .NET app using a static Generic.Dictionary
- .NET Hang Case study: The danger of locking on strings
- First step in troubleshooting complex issues: Define and scope your issue properly
- Show me the memory: Tool for visualizing virtual memory usage and GC heap usage.
- .NET Memory Leak reader email: Are you really “leaking” .net memory
- .NET Memory Leak: To dispose or not to dispose, that’s the 1 GB question
- RyuJIT Tutorial by Carol Eidt
- JIT Optimizations by Sasha Goldshtein
- JIT Optimizations, Inlining, and Interface Method Dispatching (Part 1 of N) by Sasha Goldshtein
- JIT Optimizations, Inlining, and Interface Method Dispatching (Part 2 of N) by Sasha Goldshtein
- Performance differences between debug and release builds by Hans Passant
- Aggressive Inlining in the CLR 4.5 JIT by Sasha Goldshtein
- Jit Optimizations: Inlining (I) by David Notario
- Jit Optimizations: Inlining (II) by David Notario
- More on inlining… by Eric Gunnerson
- To Inline or not to Inline: That is the question by Vance Morrison
- Some Notes on Using Machine Learning to Develop Inlining Heuristics by Andy Ayers
- The JIT does dead-code elimination in Debuggable code by Mkie Stall
- Does the JIT take advantage of my CPU? by David Notario
- Unrolling of small loops in different JIT versions by Andrey Akinshin
- RyuJIT CTP5 and loop unrolling by Andrey Akinshin
- RyuJIT RC and constant folding by Andrey Akinshin
- A story about JIT-x86 inlining and starg by Andrey Akinshin
- LegacyJIT-x86 and first method call by Andrey Akinshin
- Do PDB Files Affect Performance? by John Robbins
- What does the optimize switch do? by Eric Lippert
- Hoisting in .NET Explained (part 1) by Alexandr Nikitin
- Hoisting in .NET Examples (part 2) by Alexandr Nikitin
- ref returns are not pointers by Vladimir Sadov
- managed pointers by Vladimir Sadov
- Local variables cannot be returned by reference by Vladimir Sadov
- Safe to return rules for ref returns by Vladimir Sadov
- Why ref locals allow only a single binding? by Vladimir Sadov
- ref returns and locals by Adam Sitnik
- An Introduction to System.Threading.Channels by Stephen Toub
- ConfigureAwait FAQ by Stephen Toub
- Threading in C# by Joseph Albahari
- GC Perf Infrastructure – Part 1 by Maoni Stephens
- GC Perf Infrastructure – Part 0 by Maoni Stephens
- The history of the GC configs by Maoni Stephens
- Finalization implementation details by Maoni Stephens
- A portable way to get GC events in process and no admin privilege with 10 lines of code (and ability to dynamically enable/disable events) by Maoni Stephens
- Making CPU configuration better for GC on machines with > 64 CPUs by Maoni Stephens
- Running with Server GC in a Small Container Scenario Part 1 – Hard Limit for the GC Heap by Maoni Stephens
- Running with Server GC in a Small Container Scenario Part 0 by Maoni Stephens
- You Should Never See This Callstack in Production by Maoni Stephens
- Middle Ground between Server and Workstation GC by Maoni Stephens
- Pooling large arrays with ArrayPool by Adam Sitnik
- Value Types vs Reference Types by Adam Sitnik
- Span by Adam Sitnik
- Hardware Intrinsics in .NET Core by Tanner Gooding
- Exploring .NET Core platform intrinsics: Part 1 - Accelerating SHA-256 on ARMv8 by Nemanja Mijailovic
- Exploring .NET Core platform intrinsics: Part 2 - Accelerating AES encryption on ARMv8 by Nemanja Mijailovic
- Exploring .NET Core platform intrinsics: Part 3 - Viewing the code generated by the JIT by Nemanja Mijailovic
- Exploring .NET Core platform intrinsics: Part 4 - Alignment and pipelining by Nemanja Mijailovic
- .NET Core 3.0 Intrinsics in Real Life - 1/3 by damageboy
- .NET Core 3.0 Intrinsics in Real Life - 2/3 by damageboy
- .NET Core 3.0 Intrinsics in Real Life - 3/3 by damageboy
- Performance Improvements in .NET Core 3.0 by Stephen Toub
- Performance Improvements in .NET Core 2.1 by Stephen Toub
- Performance Improvements in .NET Core by Stephen Toub