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
260 watching
279 forks
last commit: about 2 years ago
Linked from 3 awesome lists


Awesome .NET Performance / Books

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

Awesome .NET Performance / Video Courses

Mastering .NET Performance Tuningby John Robbins
Using Threads Effectively to Build Scalable, Responsive, and Fast .NET Applications and Componentsby Jeffrey Richter
Making .NET Applications Fasterby Sasha Goldshtein
Making .NET Applications Even Fasterby Sasha Goldshtein
Measuring .NET Performanceby Sasha Goldshtein
PerfView Tutorialby Vance Morrison
Defrag Tools - Perf Viewby Vance Morrison
High Performance Coding with .NET Core and C#by Gergely Kalapos
part 1Defrag tools about CLR GC and with Maoni Stephens
.NET Async Expertby Dotnetos
.NET Memory Expertby Dotnetos
.NET Diagnostics Expertby Dotnetos

Awesome .NET Performance / On-Site Trainings

.NET Performance and Debugging Workshopby SELA (Israel)
.NET Performanceby SELA (Israel)
Asynchronous Computing and Composing Asynchronous and Event-Basedby SELA (Israel)
Parallel Programming with the TPLby SELA (Israel)
Solid Async in .NETby Rock Solid Knowledge (UK)
Mastering .NET Performance Tuningby Wintellect (USA)
Mastering .NET Threadingby Wintellect (USA)

Awesome .NET Performance / Upcoming conferences / 2021

Dotnetos - .NET Performance WorldTwo-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 6by Gleb Balykov (15.09.2021, Samsung Open Source Conference Russia)

Awesome .NET Performance / Conference talks / 2020

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

Awesome .NET Performance / Conference talks / 2019

What the game industry taught me about performanceby Brian Rasmussen, (10.11.2019, Øredev)
Compiling and Running a PHP on .NET Coreby Jakub Míšek, (11.10.2019, Dotnetos Conference)
Ethereum performance in .NET Coreby Tomasz Stanczak, Piotr Gankiewicz, (11.10.2019, Dotnetos Conference)
To ORM or not to ORMby Ł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# 8by Daniel Marbach, (11.10.2019, Dotnetos Conference)
Performance Testingby Andrey Akinshin, (10.10.2019, Dotnetos Conference)
How Entity Framework translates LINQ all the way to SQLby Shay Rojansky, (10.10.2019, Dotnetos Conference)
.NET Intrinsics in CoreCLR 3.0by Dan Schechter, (10.10.2019, Dotnetos Conference)
The .NET Garbage Collectorby Peter Sollich, (10.10.2019, Dotnetos Conference)
.NET Performance Investigationby Adam Sitnik, (10.10.2019, Dotnetos Conference)
Performance in the .NET Runtimeby Matt Warren, (10.10.2019, Dotnetos Conference)
Spanificationby Adam Sitnik (09.09.2019, Update Conference Prague)
Debugging asynchronous scenarios in .NETby Kevin Gosse, Christophe Nasarre (16.08.2019, DotNext)
Building your own profiling and diagnosis tools with Event Tracing for Windowsby Pavel Yosifovich (16.08.2019, DotNext)
JIT and AOT in the CLRby Mei-Chin Tsai (30.07.2019, JVM Language Summit)
Powerful benchmarking in .NETby Adam Sitnik (09.07.2019, Update Conference Prague)
What’s new for performance in .NET Core and ASP.NET Core 3.0by 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 applicationsby 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 toolby Kevin Gosse (18.03.2019, DotNext)
Tuning a Runtime for Both Productivity and Performanceby Mei-Chin Tsai (26.02.2019, QCon)

Awesome .NET Performance / Conference talks / 2018

Efficient Buffer Manipulation using C# 7.2's Spanby Jeffrey Richter (28.11.2018, SPB .NET Meetup)
Building your own debugging toolbox with ClrMDby Christophe Nasarre (28.11.2018, DotNext)
Scratched metalby Federico Lois (26.10.2018, DotNext)
PerfView: The Ultimate .NET Performance Toolby Sasha Goldshtein (27.08.2018, QCon)
Advanced .NET debugging techniques from a real world investigationby 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.0by Ben Adams (2017.11.09, CORESTART 2.0)
State of the .NET Performanceby Adam Sitnik (2017.07.05, NDC)
Look Mommy, No GC!by Dina Goldshtein (2017.03.23, NDC)
Squeezing the Hardware to Make Performance Juiceby Sasha Goldshtein (2017.03.17, DotNext)
Performance tuning Stack Overflow tagsby Marco Cecconi (2017.03.17, DotNext)
Multithreading Deep Diveby Gael Fraiteur (2017.03.17, DotNext)
Stack Overflow — It's all about performance!by Marco Cecconi (2017.03.17, DotNext)
ETW — Monitor Anything, Anytime, Anywhereby Dina Goldshtein (2017.03.17, DotNext)
Exceptional Exceptions in .NETby Adam Sitnik (2017.03.17, DotNext)

Awesome .NET Performance / Conference talks / 2016

PerfView: Measure and Improve Your App's Performance For Freeby Sasha Goldshtein (2016.11.02, DotNext)
The C++ and CLR Memory Modelsby Sasha Goldshtein (2016.11.02, DotNext)
Safe Systems Programming in C# and .NETby Joe Duffy (2016.08.20, QCon)
ASP.NET Core Kestrel: Adventures in building a fast web serverby Damian Edwards & David Fowler (2016.08.12, NDC)
Performance and How to Measure Itby Matt Warren (2016.07.28, ProgSCon)
Performance Optimizations in the Wildby Oren Eini (Ayende) (2016.06.23, NDC)
The Vector in Your CPU: Exploiting SIMD for Superscalar Performanceby Sasha Goldshtein (2016.04.19, DotNext)
Lessons in Extreme .NET Performanceby Ben Watson (2016.03.13, QCon)

Awesome .NET Performance / Conference talks / Older

Making .NET applications fasterby Sasha Goldshtein (2015.10.30, DevWeek)
The zen of async: Best practices for best performanceby 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

BenchmarkDotNet10,654almost 2 years agoPowerful .NET library for benchmarking
NBench534about 2 years agoCross-platform performance benchmarking and testing framework for .NET applications
CsCheck Faster164almost 2 years agoRandom data range, multithreaded, cross-platform/machine, unit testing integrated, relative performance testing

Awesome .NET Performance / Performance tools / Profiling

PrefixFree lightweight profiler for ASP.NET apps shows everything your code is doing across 30+ common libraries
MiniProfilerFree profiling tool for .NET applications with Entity Framework and ASP.Net integration (Core supported for both versions)
dotTracePaid profiler for .NET applications from the JetBrains team, included in the Resharper Ultimate package
Unchase.FluentPerformanceMeter42over 5 years agoFree open-source and cross-platform .Net Standard 2.0 library that is designed for the method’s performance measurement
codetrackFree .NET performance profiler and execution analyzer

Awesome .NET Performance / Performance tools / Application Insights

App Metrics2,221over 2 years agoApp 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 AnalyzerClr 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

NBomber2,084almost 2 years agoA 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 DLSA simple API for JMeter that enables using you IDE to design and run test using .NET

Awesome .NET Performance / Article series / Benchmarking

Microbenchmark Design Guidelines701almost 2 years agoby Adam Sitnik
The Art of Benchmarkingby Matt Warren
Adventures in Benchmarking - Memory Allocationsby Matt Warren
Micro-Benchmarking Done Wrong, And For The Wrong Reasonsby Sasha Goldshtein
On ‘stackalloc’ Performance and The Large Object Heapby Sasha Goldshtein
Micro-Benchmarking Considered Harmfulby Sasha Goldshtein
On Measuring Performanceby Sasha Goldshtein
Stopwatch under the hoodby Andrey Akinshin
DateTime under the hoodby Andrey Akinshin
Benchmarking made easyby Jon Skeet
Simple microbenchmarking in C#by Jon Skeet
Acquiring high-resolution time stamps
Performance exercise: Minimumby Andrey Akinshin
Performance exercise: Divisionby Andrey Akinshin
Measuring Performance Improvements in .NET Core with BenchmarkDotNet (Part 1)by Andrey Akinshin
AWS Lambda — Container Image .NET Benchmarkby İren Saltalı

Awesome .NET Performance / Article series / Monitoring

Performance Counters Hellby Criteo Labs
Replace .NET performance counters by CLR event tracingby Criteo Labs
Grab ETW Session, Providers and Eventsby Criteo Labs
Monitor Finalizers, contention and threads in your applicationby Criteo Labs
In-process CLR event listeners with .NET Core 2.2by Christophe Nasarre
Spying on .NET Garbage Collector with TraceEventby Christophe Nasarre

Awesome .NET Performance / Article series / Investigations

High-performance .NET by example: Filtering bot trafficby Alexandr Nikitin
RyuJIT and the never-ending ThreadAbortExceptionby Criteo Labs
9 posts about how to build your own toolbox with ClrMDby Criteo Labs
.NET Threadpool starvation, and how queuing makes it worseby Criteo Labs
Get-process-name challenge on a Friday afternoonby Christophe Nasarre
In managed code we trust, our recent battles with the .NET Garbage Collectorby Sam Saffron
Tuning performance on Azure websites using remote profilingby 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 .NETby Kunal Pathak
RyuJIT Tutorial15,518almost 2 years agoby Carol Eidt
JIT Optimizationsby 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 buildsby Hans Passant
Aggressive Inlining in the CLR 4.5 JITby 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 questionby Vance Morrison
Some Notes on Using Machine Learning to Develop Inlining Heuristics15over 8 years agoby Andy Ayers
The JIT does dead-code elimination in Debuggable codeby Mkie Stall
Does the JIT take advantage of my CPU?by David Notario
Unrolling of small loops in different JIT versionsby Andrey Akinshin
RyuJIT CTP5 and loop unrollingby Andrey Akinshin
RyuJIT RC and constant foldingby Andrey Akinshin
A story about JIT-x86 inlining and stargby Andrey Akinshin
LegacyJIT-x86 and first method callby 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 pointersby Vladimir Sadov
managed pointersby Vladimir Sadov
Local variables cannot be returned by referenceby Vladimir Sadov
Safe to return rules for ref returnsby Vladimir Sadov
Why ref locals allow only a single binding?by Vladimir Sadov
ref returns and localsby Adam Sitnik

Awesome .NET Performance / Article series / Threading

An Introduction to System.Threading.Channelsby Stephen Toub
ConfigureAwait FAQby Stephen Toub
Threading in C#by Joseph Albahari

Awesome .NET Performance / Article series / Memory

.NET Memory Performance Analysis1,841over 2 years agoby Maoni Stephens
GC Perf Infrastructure – Part 1by Maoni Stephens
GC Perf Infrastructure – Part 0by Maoni Stephens
The history of the GC configsby Maoni Stephens
Finalization implementation detailsby 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 CPUsby Maoni Stephens
Running with Server GC in a Small Container Scenario Part 1 – Hard Limit for the GC Heapby Maoni Stephens
Running with Server GC in a Small Container Scenario Part 0by Maoni Stephens
You Should Never See This Callstack in Productionby Maoni Stephens
Middle Ground between Server and Workstation GCby Maoni Stephens
Pooling large arrays with ArrayPoolby Adam Sitnik
Value Types vs Reference Typesby Adam Sitnik
Spanby Adam Sitnik

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

Vectorization using .NET APIsby Kunal Pathak
Hardware Intrinsics in .NET Coreby Tanner Gooding
Exploring .NET Core platform intrinsics: Part 1 - Accelerating SHA-256 on ARMv8by Nemanja Mijailovic
Exploring .NET Core platform intrinsics: Part 2 - Accelerating AES encryption on ARMv8by Nemanja Mijailovic
Exploring .NET Core platform intrinsics: Part 3 - Viewing the code generated by the JITby Nemanja Mijailovic
Exploring .NET Core platform intrinsics: Part 4 - Alignment and pipeliningby Nemanja Mijailovic
.NET Core 3.0 Intrinsics in Real Life - 1/3by damageboy
.NET Core 3.0 Intrinsics in Real Life - 2/3by damageboy
.NET Core 3.0 Intrinsics in Real Life - 3/3by 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 9by Stephen Toub
Performance Improvements in .NET 8by Stephen Toub
Performance Improvements in .NET 7by Stephen Toub
Performance Improvements in .NET 6by Stephen Toub
Regex Performance Improvements in .NET 5by Stephen Toub
Performance Improvements in .NET 5by Stephen Toub
Performance Improvements in .NET Core 3.0by Stephen Toub
Performance Improvements in .NET Core 2.1by Stephen Toub
Performance Improvements in .NET Coreby Stephen Toub

Awesome .NET Performance / Article series / ARM64

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

Backlinks from these awesome lists:

More related projects: