awesome-dot-net-performance

Performance guides

A curated collection of resources and experts focused on optimizing .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.

GitHub

3k stars
259 watching
277 forks
last commit: 2 months ago
Linked from 3 awesome lists


Awesome .NET Performance / Books

Pro .NET Performance: Optimize Your C# Applications by Sasha Goldshtein, Dima Zurbalev, Ido Flatow (2012)
Pro .NET Memory Management: For Better Code, Performance, and Scalability by Konrad Kokosa (2018)
Pro .NET Benchmarking: The Art of Performance Measurement by Andrey Akinshin (2019)
CLR via C# by Jeffrey Richter (2012)
Pro Asynchronous Programming with .NET by Richard Blewett, Andrew Clymer (2013)
Writing High-Performance .NET Code by Ben Watson (2018)
Advanced .NET Debugging by Mario Hewardt (2009)
Concurrent Programming on Windows by Joe Duffy (2008)
.NET IL Assembler by Serge Lidin (2014)
High-Performance Windows Store Apps by Brian Rasmussen (2014)
Customizing the Microsoft® .NET Framework Common Language Runtime by Steven Pratschner (2005)
Under the Hood of .NET Memory Management by Chris Farrell and Nick Harrison (2011)
Functional Concurrency in .NET by Riccardo Terrell (2018)

Awesome .NET Performance / 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
High Performance Coding with .NET Core and C# by Gergely Kalapos
part 1 Defrag tools about CLR GC and with Maoni Stephens
.NET Async Expert by Dotnetos
.NET Memory Expert by Dotnetos
.NET Diagnostics Expert by Dotnetos

Awesome .NET Performance / 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)

Awesome .NET Performance / Upcoming conferences / 2021

Dotnetos - .NET Performance World Two-day conference dedicated solely to .NET performance! (05-06 October 2021, Online)

Awesome .NET Performance / Conference talks / 2021

Background type preloading and MultiCoreJit in .NET 6 by Gleb Balykov (15.09.2021, Samsung Open Source Conference Russia)

Awesome .NET Performance / Conference talks / 2020

Running .NET Core performance investigation on Linux by Adam Sitnik (20.11.2020, DotNext)
What's so hard about pinning? by Maoni Stephens, (28.09.2020, Dotnetos Conference)
The Art of Tracing by Sebastian Solnica (01.10.2020, Dotnetos Conference)
Performance Improvements in .NET 5 by Stephen Toub (02.10.2020, Dotnetos Conference)
Beating CoreCLR's own C++ code with CoreCLR 3.0 intrinsics by Dan Shechter (10.03.2020, DotNext)
From ETW to EventPipe by Christophe Nasarre-Soulier (10.03.2020, DotNext)

Awesome .NET Performance / Conference talks / 2019

What the game industry taught me about performance by Brian Rasmussen, (10.11.2019, Øredev)
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)
Debugging asynchronous scenarios in .NET by Kevin Gosse, Christophe Nasarre (16.08.2019, DotNext)
Building your own profiling and diagnosis tools with Event Tracing for Windows by Pavel Yosifovich (16.08.2019, DotNext)
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)

Awesome .NET Performance / Conference talks / 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)

Awesome .NET Performance / Conference talks / 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)

Awesome .NET Performance / Conference talks / 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)

Awesome .NET Performance / Conference talks / 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)

Awesome .NET Performance / Blogs

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
Kunal Pathak

Awesome .NET Performance / Inspiring Open Source Contributors

Ben Adams
Jan Kotas
Stephen Toub
Kunal Pathak
mikedn
Tanner Gooding
Vladimir Sadov
Dan Shechter
Egor Bogatov
Federico Andres Lois
Konrad Kokosa
nietras

Awesome .NET Performance / Performance tools / Benchmarking

BenchmarkDotNet 10,557 14 days ago Powerful .NET library for benchmarking
NBench 533 2 months ago Cross-platform performance benchmarking and testing framework for .NET applications
CsCheck Faster 162 9 days ago Random data range, multithreaded, cross-platform/machine, unit testing integrated, relative performance testing

Awesome .NET Performance / Performance tools / Profiling

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
Unchase.FluentPerformanceMeter 41 almost 4 years ago Free open-source and cross-platform .Net Standard 2.0 library that is designed for the method’s performance measurement
codetrack Free .NET performance profiler and execution analyzer

Awesome .NET Performance / Performance tools / Application Insights

App Metrics 2,220 6 months ago 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 details

Awesome .NET Performance / Performance tools / Analyzers

Clr Heap Allocation Analyzer Clr Heap Allocation Analyzer is a Roslyn based Diagnostic Analyzer that is able to detect most allocations in code in the local method and bring them to your attention in Visual Studio

Awesome .NET Performance / Performance tools / Load Testing

NBomber 2,077 10 days ago A lightweight framework for writing load tests to use on any PULL or PUSH system (HTTP, WebSockets, GraphQl, gRPC, SQL Databse, MongoDb, Redis etc). Dynamic CLI output, report generation, and trend analysis. Written in F# and targeting .NET Core and full .NET Framework
JMeter DLS A simple API for JMeter that enables using you IDE to design and run test using .NET

Awesome .NET Performance / Article series / Benchmarking

Microbenchmark Design Guidelines 701 7 days ago 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
On ‘stackalloc’ Performance and The Large Object Heap by Sasha Goldshtein
Micro-Benchmarking Considered Harmful by Sasha Goldshtein
On Measuring Performance 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
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
AWS Lambda — Container Image .NET Benchmark by İren Saltalı

Awesome .NET Performance / Article series / Monitoring

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

Awesome .NET Performance / Article series / Investigations

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
In managed code we trust, our recent battles with the .NET Garbage Collector by Sam Saffron
Tuning performance on Azure websites using remote profiling by Thomas Ardal

Awesome .NET Performance / Article series / Debugging performances series by Tess Ferrandez

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

Awesome .NET Performance / Article series / JIT Optimizations

Loop alignment in .NET by Kunal Pathak
RyuJIT Tutorial 15,352 6 days ago 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 15 almost 7 years ago 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

Awesome .NET Performance / Article series / 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
ref returns and locals by Adam Sitnik

Awesome .NET Performance / Article series / Threading

An Introduction to System.Threading.Channels by Stephen Toub
ConfigureAwait FAQ by Stephen Toub
Threading in C# by Joseph Albahari

Awesome .NET Performance / Article series / Memory

.NET Memory Performance Analysis 1,828 9 months ago by Maoni Stephens
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

Awesome .NET Performance / Article series / .NET CPU Intrinsics

Vectorization using .NET APIs by Kunal Pathak
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
Decimating Array.Sort with AVX2 - 1/∞ by damageboy
Decimating Array.Sort with AVX2 - 2/∞ by damageboy
Decimating Array.Sort with AVX2 - 3/∞ by damageboy

Awesome .NET Performance / Article series / Performance Improvements in .NET Core

Performance Improvements in .NET 9 by Stephen Toub
Performance Improvements in .NET 8 by Stephen Toub
Performance Improvements in .NET 7 by Stephen Toub
Performance Improvements in .NET 6 by Stephen Toub
Regex Performance Improvements in .NET 5 by Stephen Toub
Performance Improvements in .NET 5 by Stephen Toub
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

Awesome .NET Performance / Article series / ARM64

Arm64 Hardware Intrinsics APIs in .NET - Part 6 by Kunal Pathak
Arm64 Hardware Intrinsics APIs in .NET - Part 5 by Kunal Pathak
Arm64 Hardware Intrinsics APIs in .NET - Part 4 by Kunal Pathak
Arm64 Hardware Intrinsics APIs in .NET - Part 3 by Kunal Pathak
Arm64 Hardware Intrinsics APIs in .NET - Part 2 by Kunal Pathak
Arm64 Hardware Intrinsics APIs in .NET - Part 1 by Kunal Pathak
Peephole optimizations in .NET by Kunal Pathak
Memory barriers in ARM64 by Kunal Pathak
ARM64 performance of .Net Core 5 by Kunal Pathak

Backlinks from these awesome lists:

More related projects: