Awesome .NET Performance
A curated list of awesome .NET Performance books, courses, trainings, conference talks, blogs and most inspiring open source contributors. Inspired by awesome-... stuff.
Books
- Pro .NET Performance by Sasha Goldshtein, Dima Zurbalev, Ido Flatow
- 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
Video Courses
- 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
On-Site Trainings
- .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)
Conference talks
Sorted from newest to oldest:
- 2017
- 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)
Blogs
- Matt Warren
- Andrey Akinshin
- Oren Eini aka Ayende
- Sasha Goldshtein
- Alexandre Mutel aka xoofx
- Jack Mott aka PerlinMandleBro
- Vladimir Sadov
Inspiring Open Source Contributors
- Ben Adams
- Jan Kotas
- Stephen Toub
- omariom
- James Ko
- mikedn
- Justin Van Patten
- nietras
- Vladimir Sadov
- Federico Andres Lois
Performance measurement
- BenchmarkDotNet - Powerful .NET library for benchmarking.
- NBench - Cross-platform performance benchmarking and testing framework for .NET applications.
- xunit.performance - Provides extensions over xUnit to author performance tests.
- Prefix - Free lightweight profiler for ASP.NET apps shows everything your code is doing across 30+ common libraries
- 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.
High Performance Libraries
- 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.
- Nessos Streams - A lightweight F#/C# library for efficient functional-style pipelines on streams of data.
- SIMD Array - SIMD and other Performance enhanced Array operations for F#.
- markdig - Markdig is a fast, powerful, CommonMark compliant, extensible Markdown processor for .NET.
- Wire - A high performance polymorphic serializer for the .NET framework.
- Disruptor-Net - .NET port of LMAX Disruptor, a faster alternative to BlockingCollection.
- 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.
- NativeInterop - Generic pointers and native 64-bit arrays for .NET.
- MPMCQueue.NET - Bounded multiple producers multiple consumers queue for .NET.
- ImTools - Immutable persistent collections and helpers designed for performance and simplicity of use.
- FastExpressionCompiler - Fast Expression Trees compiler to delegate to compensate for slow
Expression.Compile()
. - 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.
Article series
Benchmarking
- 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
JIT Optimizations
- 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
Refs
- 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
Threading
- Threading in C# by Joseph Albahari