卓越的.NET性能
一个精选的优秀.NET性能书籍、课程、培训、会议演讲、博客和最具启发性的开源贡献者列表。灵感来自awesome-...系列。
书籍
- Pro .NET Performance: Optimize Your C# Applications 作者:Sasha Goldshtein, Dima Zurbalev, Ido Flatow (2012)
- Pro .NET Memory Management: For Better Code, Performance, and Scalability 作者:Konrad Kokosa (2018)
- Pro .NET Benchmarking: The Art of Performance Measurement 作者:Andrey Akinshin (2019)
- CLR via C# 作者:Jeffrey Richter (2012)
- Pro Asynchronous Programming with .NET 作者:Richard Blewett, Andrew Clymer (2013)
- Writing High-Performance .NET Code 作者:Ben Watson (2018)
- Advanced .NET Debugging 作者:Mario Hewardt (2009)
- Concurrent Programming on Windows 作者:Joe Duffy (2008)
- .NET IL Assembler 作者:Serge Lidin (2014)
- High-Performance Windows Store Apps 作者:Brian Rasmussen (2014)
- Customizing the Microsoft® .NET Framework Common Language Runtime 作者:Steven Pratschner (2005)
- Under the Hood of .NET Memory Management 作者:Chris Farrell and Nick Harrison (2011)
- Functional Concurrency in .NET 作者:Riccardo Terrell (2018)
视频课程
- Mastering .NET Performance Tuning 作者:John Robbins
- Using Threads Effectively to Build Scalable, Responsive, and Fast .NET Applications and Components 作者:Jeffrey Richter
- Making .NET Applications Faster 作者:Sasha Goldshtein
- Making .NET Applications Even Faster 作者:Sasha Goldshtein
- Measuring .NET Performance 作者:Sasha Goldshtein
- PerfView Tutorial 作者:Vance Morrison
- Defrag Tools - Perf View 作者:Vance Morrison
- High Performance Coding with .NET Core and C# 作者:Gergely Kalapos
- Defrag tools关于CLR GC的第1部分 第2部分 第3部分和第4部分 作者:Maoni Stephens
- .NET Async Expert 作者:Dotnetos
- .NET Memory Expert 作者:Dotnetos
- .NET Diagnostics Expert 作者:Dotnetos
现场培训
- .NET Performance and Debugging Workshop 由SELA提供(以色列)
- .NET Performance 由SELA提供(以色列)
- Asynchronous Computing and Composing Asynchronous and Event-Based 由SELA提供(以色列)
- Parallel Programming with the TPL 由SELA提供(以色列)
- Solid Async in .NET 由Rock Solid Knowledge提供(英国)
- Mastering .NET Performance Tuning 由Wintellect提供(美国)
- Mastering .NET Threading 由Wintellect提供(美国)
即将举行的会议
- 2021
- Dotnetos - .NET Performance World - 为期两天的专门针对.NET性能的会议!(2021年10月5-6日,线上)
会议演讲
按最新到最旧排序:
- 2021年
- Gleb Balykov 的《.NET 6中的背景类型预加载和MultiCoreJit》(2021年9月15日,三星开源大会俄罗斯)
- 2020年
- Adam Sitnik 的《在Linux上运行.NET Core性能调查》(2020年11月20日,DotNext)
- Maoni Stephens 的《固定有什么难的?》(2020年9月28日,Dotnetos大会)
- Sebastian Solnica 的《追踪的艺术》(2020年10月1日,Dotnetos大会)
- Stephen Toub 的《.NET 5中的性能改进》(2020年10月2日,Dotnetos大会)
- Dan Shechter 的《使用CoreCLR 3.0内部函数击败CoreCLR自身的C++代码》(2020年3月10日,DotNext)
- Christophe Nasarre-Soulier 的《从ETW到EventPipe》(2020年3月10日,DotNext)
- 2019年
- Brian Rasmussen 的《游戏行业教会我的性能知识》(2019年11月10日,Øredev)
- Jakub Míšek 的《在.NET Core上编译和运行PHP》(2019年10月11日,Dotnetos大会)
- Tomasz Stanczak, Piotr Gankiewicz 的《.NET Core中的以太坊性能》(2019年10月11日,Dotnetos大会)
- Łukasz Dziekan 的《使用还是不使用ORM》(2019年10月11日,Dotnetos大会)
- Matt Ellis 的《在C#中编写无分配代码》(2019年10月11日,Dotnetos大会)
- Daniel Marbach 的《深入.NET Core和C# 8中的异步》(2019年10月11日,Dotnetos大会)
- Andrey Akinshin 的《性能测试》(2019年10月10日,Dotnetos大会)
- Shay Rojansky 的《Entity Framework如何将LINQ转换为SQL》(2019年10月10日,Dotnetos大会)
- Dan Schechter 的《CoreCLR 3.0中的.NET内部函数》(2019年10月10日,Dotnetos大会)
- Peter Sollich 的《.NET垃圾收集器》(2019年10月10日,Dotnetos大会)
- Adam Sitnik 的《.NET性能调查》(2019年10月10日,Dotnetos大会)
- Matt Warren 的《.NET运行时中的性能》(2019年10月10日,Dotnetos大会)
- Adam Sitnik 的《Span化》(2019年9月9日,布拉格Update大会)
- Kevin Gosse, Christophe Nasarre 的《在.NET中调试异步场景》(2019年8月16日,DotNext)
- Pavel Yosifovich 的《使用Windows事件追踪构建自己的分析和诊断工具》(2019年8月16日,DotNext)
- Mei-Chin Tsai 的《CLR中的JIT和AOT》(2019年7月30日,JVM语言峰会)
- Adam Sitnik 的《.NET中强大的基准测试》(2019年7月9日,布拉格Update大会)
- Ben Adams 的《.NET Core和ASP.NET Core 3.0中性能的新特性》(2019年7月8日,.NET Core夏季活动)
- Konrad Kokosa 的《Ref结构体,只读ref结构体,ref返回,ref一切!》(2019年6月4日,DotNext)
- Jeffrey Richter 的《构建响应式和可扩展的应用程序》(2019年3月26日,DotNext)
- Konrad Kokosa 的《制作你自己的.NET GC —— "为什么"和"怎么做"》(2019年3月18日,DotNext)
- Kevin Gosse 的《扩展新版WinDbg以构建你梦想中的调试工具》(2019年3月18日,DotNext)
- Mei-Chin Tsai 的《调整运行时以兼顾生产力和性能》(2019年2月26日,QCon)
- 2018年
- Jeffrey Richter 的《使用C# 7.2的Span高效操作缓冲区》(2018年11月28日,SPB .NET Meetup)
- Christophe Nasarre 的《使用ClrMD构建你自己的调试工具箱》(2018年11月28日,DotNext)
- Federico Lois 的《刮削金属》(2018年10月26日,DotNext)
- Sasha Goldshtein 的《PerfView:终极.NET性能工具》(2018年8月27日,QCon)
- Christophe Nasarre & Kevin Gosse 的《来自真实世界调查的高级.NET调试技术》(2018年8月21日,DotNext)
- Federico Lois 的《高性能C#模式》(2018年2月8日,DotNext)
- 2017年
- Ben Adams 的《.NET Core 2.0中性能的新特性》(2017年11月9日,CORESTART 2.0)
- Adam Sitnik 的《.NET性能的现状》(2017年7月5日,NDC)
- Dina Goldshtein 的《看妈妈,没有GC!》(2017年3月23日,NDC)
- Sasha Goldshtein 的《榨干硬件以提升性能》(2017年3月17日,DotNext)
- Marco Cecconi 的《性能调优Stack Overflow标签》(2017年3月17日,DotNext)
- Gael Fraiteur 的《多线程深入探讨》(2017年3月17日,DotNext)
- Marco Cecconi 的《Stack Overflow —— 一切都关乎性能!》(2017年3月17日,DotNext)
- Dina Goldshtein 的《ETW —— 随时随地监控任何事物》(2017年3月17日,DotNext)
- Adam Sitnik 的《.NET中的异常情况》(2017年3月17日,DotNext)
- 2016年
- Sasha Goldshtein 的《PerfView:免费测量和改进应用程序性能》(2016年11月2日,DotNext)
- Sasha Goldshtein 的《C++和CLR内存模型》(2016年11月2日,DotNext)
- Joe Duffy 的《C#和.NET中的安全系统编程》(2016年8月20日,QCon)
- Damian Edwards & David Fowler 的《ASP.NET Core Kestrel:构建快速Web服务器的冒险》(2016年8月12日,NDC)
- Matt Warren 的《性能及其测量方法》(2016年7月28日,ProgSCon)
- Oren Eini (Ayende) 的《实战中的性能优化》(2016年6月23日,NDC)
- Sasha Goldshtein 的《CPU中的向量:利用SIMD实现超标量性能》(2016年4月19日,DotNext)
- Ben Watson 的《极致.NET性能的经验教训》(2016年3月13日,QCon)
- 更早
- Sasha Goldshtein 的《让.NET应用程序更快》(2015年10月30日,DevWeek)
- Stephen Toub 的《异步的禅:最佳实践以获得最佳性能》(2011年9月13日,Build)
博客
- Maoni Stephens
- Stephen Toub
- Matt Warren
- Andrey Akinshin
- Dan Shechter
- Egor Bogatov
- Oren Eini 又名 Ayende
- Alexandre Mutel 又名 xoofx
- Vladimir Sadov
- Adam Sitnik
- Konrad Kokosa
- Kunal Pathak
鼓舞人心的开源贡献者
- Ben Adams
- Jan Kotas
- Stephen Toub
- Kunal Pathak
- mikedn
- Tanner Gooding
- Vladimir Sadov
- Dan Shechter
- Egor Bogatov
- Federico Andres Lois
- Konrad Kokosa
- nietras
性能工具
基准测试
- BenchmarkDotNet - 强大的 .NET 基准测试库。
- NBench - 跨平台的 .NET 应用性能基准测试和测试框架。
- CsCheck Faster - 随机数据范围、多线程、跨平台/机器、集成单元测试、相对性能测试。
性能分析
- Prefix - 免费的轻量级 ASP.NET 应用性能分析器,可显示代码在 30 多个常用库中的所有操作
- MiniProfiler - 适用于 .NET 应用的免费性能分析工具,集成了 Entity Framework 和 ASP.Net(两个版本均支持 Core)
- dotTrace - JetBrains 团队提供的付费 .NET 应用性能分析器,包含在 Resharper Ultimate 包中
- Unchase.FluentPerformanceMeter - 免费开源的跨平台 .Net Standard 2.0 库,专为方法性能测量而设计
- codetrack - 免费的 .NET 性能分析器和执行分析器
Application Insights
- App Metrics - App Metrics 是一个开源的跨平台 .NET 库,用于记录和报告应用内的指标并报告其健康状况。查看文档了解更多详情。
分析器
- Clr Heap Allocation Analyzer Clr Heap Allocation Analyzer 是一个基于 Roslyn 的诊断分析器,能够检测本地方法中的大多数分配,并在 Visual Studio 中引起您的注意。
负载测试
- NBomber 一个轻量级框架,用于编写负载测试,可用于任何 PULL 或 PUSH 系统(HTTP、WebSockets、GraphQl、gRPC、SQL 数据库、MongoDb、Redis 等)。动态 CLI 输出、报告生成和趋势分析。使用 F# 编写,面向 .NET Core 和完整的 .NET Framework。
- JMeter DLS 一个简单的 JMeter API,允许您使用 .NET 在 IDE 中设计和运行测试。
文章系列
基准测试
- 微基准测试设计指南 作者:Adam Sitnik
- 基准测试的艺术 作者:Matt Warren
- 基准测试冒险 - 内存分配 作者:Matt Warren
- 微基准测试做错了,而且是出于错误的原因 作者:Sasha Goldshtein
- 'stackalloc' 性能和大对象堆 作者:Sasha Goldshtein
- 微基准测试被认为是有害的 作者:Sasha Goldshtein
- 关于测量性能 作者:Sasha Goldshtein
- Stopwatch 内部原理 作者:Andrey Akinshin
- DateTime 内部原理 作者:Andrey Akinshin
- 简化基准测试 作者:Jon Skeet
- C# 中的简单微基准测试 作者:Jon Skeet
- 获取高精度时间戳
- 性能练习:最小值 作者:Andrey Akinshin
- 性能练习:除法 作者:Andrey Akinshin
- 使用 BenchmarkDotNet 测量 .NET Core 性能改进(第 1 部分) 作者:Andrey Akinshin
- AWS Lambda — 容器镜像 .NET 基准测试 作者:İren Saltalı
监控
- 性能计数器地狱 作者:Criteo Labs
- 用 CLR 事件跟踪替换 .NET 性能计数器 作者:Criteo Labs
- 抓取 ETW 会话、提供程序和事件 作者:Criteo Labs
- 监控应用中的终结器、争用和线程 作者:Criteo Labs
- .NET Core 2.2 中的进程内 CLR 事件监听器 作者:Christophe Nasarre
- 使用 TraceEvent 窥探 .NET 垃圾收集器 作者:Christophe Nasarre
调查
- 高性能 .NET 示例:过滤机器人流量 作者:Alexandr Nikitin
- RyuJIT 和永无止境的 ThreadAbortException 作者:Criteo Labs
- 9 篇关于如何使用 ClrMD 构建自己的工具箱的文章 作者:Criteo Labs
- .NET 线程池饥饿,以及队列如何使情况变得更糟 作者:Criteo Labs
- 周五下午的 Get-process-name 挑战 作者:Christophe Nasarre
- 我们信任托管代码,我们最近与 .NET 垃圾收集器的战斗 作者:Sam Saffron
- 使用远程分析调整 Azure 网站的性能 作者:Thomas Ardal
Tess Ferrandez 的性能调试系列
- 所有 .NET 调试演示:挂起、崩溃、内存和 CPU
- 读者邮件:需要帮助解决性能/内存问题
- 使用 SOSex.dll 调试经典的 ReaderWriterLock 死锁
- .NET 4.0 中 SOS 的新命令 第 1 部分
- .NET 应用中使用静态 Generic.Dictionary 导致的高 CPU 使用率
- .NET 挂起案例研究:锁定字符串的危险
- 解决复杂问题的第一步:正确定义和界定你的问题
- 显示内存:可视化虚拟内存使用和 GC 堆使用的工具
- .NET 内存泄漏读者邮件:你真的在"泄漏" .net 内存吗
- .NET 内存泄漏:是否释放,这是 1 GB 的问题
JIT优化
- Kunal Pathak的.NET中的循环对齐
- Carol Eidt的RyuJIT教程
- Sasha Goldshtein的JIT优化
- Sasha Goldshtein的JIT优化、内联和接口方法调度(第1部分)
- Sasha Goldshtein的JIT优化、内联和接口方法调度(第2部分)
- Hans Passant的调试版本和发布版本之间的性能差异
- Sasha Goldshtein的CLR 4.5 JIT中的积极内联
- David Notario的JIT优化:内联(I)
- David Notario的JIT优化:内联(II)
- Eric Gunnerson的关于内联的更多内容...
- Vance Morrison的内联还是不内联:这是个问题
- Andy Ayers的使用机器学习开发内联启发式的一些注意事项
- Mike Stall的JIT在可调试代码中进行死代码消除
- David Notario的JIT是否利用了我的CPU?
- Andrey Akinshin的不同JIT版本中小循环的展开
- Andrey Akinshin的RyuJIT CTP5和循环展开
- Andrey Akinshin的RyuJIT RC和常量折叠
- Andrey Akinshin的关于JIT-x86内联和starg的故事
- Andrey Akinshin的LegacyJIT-x86和第一个方法调用
- John Robbins的PDB文件是否影响性能?
- Eric Lippert的optimize开关做什么?
- Alexandr Nikitin的.NET中的提升解释(第1部分)
- Alexandr Nikitin的.NET中的提升示例(第2部分)
引用
- Vladimir Sadov的ref返回不是指针
- Vladimir Sadov的托管指针
- Vladimir Sadov的局部变量不能通过引用返回
- Vladimir Sadov的ref返回的安全返回规则
- Vladimir Sadov的为什么ref局部变量只允许单次绑定?
- Adam Sitnik的ref返回和局部变量
线程
- Stephen Toub的System.Threading.Channels简介
- Stephen Toub的ConfigureAwait常见问题解答
- Joseph Albahari的C#中的线程
内存
- Maoni Stephens的.NET内存性能分析
- Maoni Stephens的GC性能基础设施 - 第1部分
- Maoni Stephens的GC性能基础设施 - 第0部分
- Maoni Stephens的GC配置的历史
- Maoni Stephens的终结实现细节
- Maoni Stephens的一种便携方式,使用10行代码在进程中获取GC事件且无需管理员权限(并能动态启用/禁用事件)
- Maoni Stephens的改善超过64个CPU的机器上GC的CPU配置
- Maoni Stephens的在小容器场景中运行Server GC - 第1部分 - GC堆的硬限制
- Maoni Stephens的在小容器场景中运行Server GC - 第0部分
- Maoni Stephens的在生产环境中你永远不应该看到这个调用栈
- Maoni Stephens的Server和Workstation GC之间的中间地带
- Adam Sitnik的使用ArrayPool池化大型数组
- Adam Sitnik的值类型与引用类型
- Adam Sitnik的Span
.NET CPU内部函数
- Kunal Pathak的使用.NET API进行向量化
- Tanner Gooding的.NET Core中的硬件内部函数
- Nemanja Mijailovic的探索.NET Core平台内部函数:第1部分 - 在ARMv8上加速SHA-256
- Nemanja Mijailovic的探索.NET Core平台内部函数:第2部分 - 在ARMv8上加速AES加密
- Nemanja Mijailovic的探索.NET Core平台内部函数:第3部分 - 查看JIT生成的代码
- Nemanja Mijailovic的探索.NET Core平台内部函数:第4部分 - 对齐和流水线
- damageboy的.NET Core 3.0内部函数在实际中的应用 - 1/3
- damageboy的.NET Core 3.0内部函数在实际中的应用 - 2/3
- damageboy的.NET Core 3.0内部函数在实际中的应用 - 3/3
- damageboy的用AVX2毁灭Array.Sort - 1/∞
- damageboy的用AVX2毁灭Array.Sort - 2/∞
- damageboy的用AVX2毁灭Array.Sort - 3/∞
.NET Core中的性能改进
- Stephen Toub的.NET 8中的性能改进
- Stephen Toub的.NET 7中的性能改进
- Stephen Toub的.NET 6中的性能改进
- Stephen Toub的.NET 5中的正则表达式性能改进
- Stephen Toub的.NET 5中的性能改进
- Stephen Toub的.NET Core 3.0中的性能改进
- Stephen Toub的.NET Core 2.1中的性能改进
- Stephen Toub的.NET Core中的性能改进
ARM64
- .NET中的Arm64硬件内部函数API - 第6部分 作者:Kunal Pathak
- .NET中的Arm64硬件内部函数API - 第5部分 作者:Kunal Pathak
- .NET中的Arm64硬件内部函数API - 第4部分 作者:Kunal Pathak
- .NET中的Arm64硬件内部函数API - 第3部分 作者:Kunal Pathak
- .NET中的Arm64硬件内部函数API - 第2部分 作者:Kunal Pathak
- .NET中的Arm64硬件内部函数API - 第1部分 作者:Kunal Pathak
- .NET中的窥孔优化 作者:Kunal Pathak
- ARM64中的内存屏障 作者:Kunal Pathak
- .Net Core 5在ARM64上的性能 作者:Kunal Pathak