优化的艺术——深入.NET性能之巅

优化的艺术——深入.NET性能之巅

lhx077
This is a sample of the book's content.Buy on Leanpub

Table of Contents

优化的艺术——深入.NET性能之巅

  • 前言
  • 如何阅读本书
  • 作者的话
  • 致谢
  • 第1章:性能优化的世界观
    • 1.1 重新定义“优化“:延迟、吞吐量、资源消耗与可伸缩性
    • 1.2 “过早优化“的现代解读:何时优化,优化什么?
    • 1.3 性能分析的黄金法则:测量、测量、再测量!
    • 1.4 建立性能基线:你的“参照物“
    • 1.5 80/20法则与性能瓶颈定位
    • 1.6 优化与代码可维护性的权衡
    • 本章总结
  • 第2章:精通性能度量与分析
    • 2.1 王者工具:BenchmarkDotNet 完全指南
    • 2.2 可视化性能剖析器实战
    • 2.3 日志与追踪:EventSource、EventListener与OpenTelemetry
    • 2.4 生产环境监控:Application Insights、Prometheus与自定义指标
    • 2.5 高级技巧:自定义诊断器与性能测试自动化
    • 本章总结
    • 思考题
    • 实践练习
  • 第3章:硬件的“契约“:程序员必须懂的CPU与内存
    • 3.1 现代CPU流水线、超标量与乱序执行
    • 3.2 分支预测的诅咒:为何if-else会影响性能?
    • 3.3 CPU缓存层次结构:L1/L2/L3 Cache 的工作原理
    • 3.4 内存模型与内存屏障 (Memory Barriers)
    • 3.5 .NET与硬件:JIT编译概览
    • 本章总结
    • 思考题
    • 实践练习
  • 第4章:类型系统——值类型与引用类型的性能奥秘
    • 4.1 栈与堆:内存分配的两个世界
    • 4.2 struct的设计哲学与黄金法则
    • 4.3 readonly struct与防御性拷贝
    • 4.4 ref struct与stackalloc:栈上乾坤
    • 4.5 in参数修饰符:避免大struct的拷贝开销
    • 4.6 ref returns与ref locals:返回与操作引用
    • 4.7 装箱与拆箱:性能的隐形杀手
    • 4.8 泛型与接口:彻底告别装箱时代
    • 本章总结
    • 思考题
    • 实践练习
  • 第5章:字符串与文本处理
    • 5.1 System.String的内存真相:不可变性的代价
    • 5.2 字符串驻留机制:内存优化的双刃剑
    • 5.3 StringBuilder的内部机制与最佳实践
    • 5.4 高性能拼接策略:Concat、Join与string.Create
    • 5.5 CompositeFormat与现代字符串格式化
    • 5.6 解析与格式化:从TryParse到ISpanParsable
    • 5.7 正则表达式性能优化:编译与Source Generators
    • 5.8 Span革命:零拷贝文本处理
    • 本章总结
    • 思考题
    • 实践练习
  • 第6章 集合与数据结构
    • 6.1 数组与List的性能对比
    • 6.2 Dictionary<TKey, TValue>深度剖析
    • 6.3 LINQ的性能特征与优化策略
    • 6.4 不可变集合的性能权衡
    • 6.5 特殊场景下的集合选择
    • 本章总结
    • 思考题
    • 实践练习
  • 第7章:委托、Lambda与反射
    • 7.1 委托的本质:Delegate、Action
    • 7.2 Lambda表达式与闭包:捕获变量的代价
    • 7.3 反射:性能的代价与缓存策略
    • 7.4 表达式树:编译表达式以提升性能
    • 本章总结
    • 思考题
    • 实践练习
  • 第8章:.NET GC深度揭秘
    • 8.1 垃圾回收的哲学:自动内存管理的优劣
    • 8.2 GC的核心算法:标记-清除与标记-整理
    • 8.3 分代收集:Gen 0、Gen 1、Gen 2的奥秘
    • 8.4 大对象堆与固定对象堆:LOH与POH
    • 8.5 GC模式:Workstation GC与Server GC
    • 8.6 理解GC触发时机与STW暂停
    • 8.7 GC调优:GCSettings、GC.Collect与NoGCRegion
    • 本章总结
    • 思考题
    • 实践练习
  • 第9章:识别与消除不必要的内存分配
    • 9.1 使用Profiler定位内存热点
    • 9.2 减少临时对象:常见分配陷阱分析
    • 9.3 对象池的设计与使用
    • 9.4 ArrayPool:重用大型数组,避免LOH碎片
    • 9.5 字符串相关分配的治理
    • 本章总结
    • 思考题
    • 实践练习
  • 第10章:Span:现代.NET内存革命
    • 10.1 Span的诞生:统一访问连续内存
    • 10.2 ref struct的限制与stack-only特性
    • 10.3 ReadOnlySpan与API设计
    • 10.4 Memory
    • 10.5 System.Buffers:IBufferWriter
    • 10.6 实战案例:用Span实现零拷贝的文件与网络处理
    • 本章总结
    • 思考题
    • 实践练习
  • 第11章:IDisposable、终结器与资源管理
    • 11.1 using语句与Dispose模式的正确实现
    • 11.2 终结器的工作原理与性能影响
    • 11.3 SafeHandle与CriticalFinalizerObject
    • 11.4 内存泄漏的诊断与修复
    • 本章总结
    • 思考题
    • 实践练习
  • 第12章:System.IO.Pipelines:高性能IO的未来
    • 12.1 传统IO模型的局限性
    • 12.2 Pipelines的核心概念:Pipe、PipeReader与PipeWriter
    • 12.3 背压机制与流量控制
    • 12.4 实战:构建高性能网络服务器
    • 本章总结
    • 思考题
    • 实践练习
  • 第13章:JIT编译器的工作内幕
    • 13.1 从IL到机器码:JIT编译流程解析
    • 13.2 方法内联:最重要的优化技术
    • 13.3 循环优化与边界检查消除
    • 13.4 分层编译与动态PGO
    • 13.5 死代码消除与常量传播
    • 13.6 分支优化与条件移动
    • 13.7 内存访问优化与寄存器分配
    • 本章总结
    • 思考题
    • 实践练习
  • 第14章:unsafe代码与指针——释放终极性能
    • 14.1 unsafe上下文与指针类型
    • 14.2 fixed语句:固定托管对象地址
    • 14.3 stackalloc:栈内存分配的艺术
    • 14.4 函数指针(delegate*):来自unsafe世界的高性能回调
    • 14.5 System.Runtime.CompilerServices.Unsafe:高级内存操作
    • 14.6 System.Runtime.InteropServices.MemoryMarshal:Span与原始内存的桥梁
    • 14.7 本章小结
    • 思考题
    • 实践练习
  • 第15章:SIMD——单指令多数据并行
    • 15.1 SIMD技术原理
    • 15.2 System.Numerics.Vector
    • 15.3 硬件内部函数
    • 15.4 SIMD应用实践
    • 15.5 自动向量化
    • 本章总结
    • 思考题
    • 实践练习
  • 第16章:位运算的魔力
    • 16.1 基础位操作
    • 16.2 System.Numerics.BitOperations类
    • 16.3 位掩码与位图应用
    • 16.4 无分支算法与位运算技巧
    • 本章总结
    • 思考题
    • 实践练习
  • 第17章:结构体布局与数据对齐
    • 17.1 StructLayout特性与内存布局控制
    • 17.2 FieldOffset与精确布局控制
    • 17.3 数据对齐与缓存行优化
    • 17.4 面向数据的设计方法
    • 本章总结
    • 思考题
    • 实践练习
    • 实践练习
  • 第18章:多线程与同步机制
    • 18.1 线程模型:Thread、ThreadPool与Task
    • 18.2 锁机制:从用户态到内核态
    • 18.3 Interlocked原子操作
    • 18.4 System.Threading.Channels
    • 18.5 并发集合
    • 本章总结
    • 思考题
    • 实践练习
  • 第19章:async/await深度解析
    • 19.1 状态机原理:编译器的魔法
    • 19.2 ExecutionContext与异步上下文流转
    • 19.3 SynchronizationContext与ConfigureAwait
    • 19.4 ValueTask与IValueTaskSource:零分配异步的艺术
    • 19.5 异步方法的性能陷阱与最佳实践
    • 19.6 异步流与IAsyncEnumerable
    • 本章总结
    • 思考题
    • 实践练习
  • 第20章:并行计算
    • 20.1 Parallel类的应用
    • 20.2 并行LINQ
    • 20.3 Task的组合与延续
    • 20.4 数据流编程模型
    • 20.5 并行编程中的数据布局优化
    • 本章总结
    • 思考题
    • 实践练习
  • 第21章:高级并发模式与无锁数据结构
    • 21.1 .NET内存模型与volatile语义
    • 21.2 无锁数据结构设计
    • 21.3 读写锁的应用
    • 21.4 伪共享问题的解决方案
    • 本章总结
    • 思考题
    • 实践练习
  • 第22章:ASP.NET Core高性能实践
    • 22.1 Kestrel服务器优化
    • 22.2 中间件性能考量
    • 22.3 响应缓存与分布式缓存
    • 22.4 gRPC与Web API的性能对比
    • 22.5 SignalR性能调优
    • 22.6 对象池与依赖注入集成
    • 本章总结
    • 思考题
    • 实践练习
  • 第23章:Entity Framework Core性能优化
    • 23.1 查询执行机制
    • 23.2 变更追踪的性能影响
    • 23.3 批量操作优化
    • 23.4 查询缓存与编译查询
    • 23.5 Dapper与EF Core的对比分析
    • 本章总结
    • 思考题
    • 实践练习
  • 第24章:AOT时代:Source Generators与Native AOT
    • 24.1 Source Generators原理与应用
    • 24.2 Native AOT技术详解
    • 24.3 程序集裁剪技术
    • 24.4 编译模式选择与实践指南
    • 本章总结
    • 思考题
    • 实践练习
  • 第25章:总结与展望
    • 25.1 性能优化文化的建立
    • 25.2 .NET性能技术的演进方向
    • 25.3 性能优化的工程哲学
    • 本章总结
    • 思考题
    • 实践练习
  • 后记
优化的艺术——深入.NET性能之巅/第15章:SIMD——单指令多数据并行

第15章:SIMD——单指令多数据并行

https://leanpub.com/The-Art-of-Optimization

15.1 SIMD技术原理

https://leanpub.com/The-Art-of-Optimization

15.2 System.Numerics.Vector

https://leanpub.com/The-Art-of-Optimization

15.3 硬件内部函数

https://leanpub.com/The-Art-of-Optimization

15.4 SIMD应用实践

https://leanpub.com/The-Art-of-Optimization

15.5 自动向量化

https://leanpub.com/The-Art-of-Optimization

本章总结

https://leanpub.com/The-Art-of-Optimization

思考题

https://leanpub.com/The-Art-of-Optimization

实践练习

https://leanpub.com/The-Art-of-Optimization

Up next

第16章:位运算的魔力

In this chapter

  • 第15章:SIMD——单指令多数据并行
  • 15.1 SIMD技术原理
  • 15.2 System.Numerics.Vector
  • 15.3 硬件内部函数
  • 15.4 SIMD应用实践
  • 15.5 自动向量化
  • 本章总结
  • 思考题
  • 实践练习