用途:为 .NET 应用提供垃圾回收(GC)与内存管理的调优与诊断知识,覆盖 GC 模式选择、大对象堆与固定对象堆、分代调优、缓冲池、弱引用、资源释放与内存分析。
主要能力:
- GC 模式:工作站与服务器 GC 对比(线程数、堆段、暂停延迟、吞吐量、默认场景),并发与非并发 GC,.NET 8+ 的 DATAS 动态适配,.NET 7+ 的 GC Regions。
- 分代 GC:Gen0/1/2 的回收频率与成本,调优原则(降低 Gen0 分配率、避免 mid-life crisis、减少 Gen2 频率),以及用 dotnet-counters 与 GC.CollectionCount 等监控。
- LOH/POH:85,000 字节以上对象进入 LOH,默认不压缩;可用 GCSettings.LargeObjectHeapCompactionMode 强制压缩。POH(.NET 5+)用于固定地址对象,如原生互操作与重叠 I/O 缓冲,可用 GC.AllocateArray<byte>(4096, pinned: true) 分配。
- Span/Memory 所有权:IMemoryOwner 管理池化缓冲生命周期,所有权转移模式,Span 的栈上约束(不能作字段、异步方法参数或泛型参数),异步场景改用 Memory。
- 缓冲池:ArrayPool 的 Rent/Return 模式与自定义池(ArrayPool<byte>.Create),MemoryPool 返回 IMemoryOwner 的 RAII 式管理,以及归还、切片、敏感数据清理等使用准则。
- 弱引用与缓存:WeakReference 用于可回收的大对象缓存,并说明其开销与 MemoryCache 的取舍。
- 终结器与 IDisposable:优先 IDisposable,终结器仅作非托管资源安全网,并列出终结器成本(多存活一轮 GC、单线程、顺序不确定、进程退出不保证执行)。
- 内存压力:GC.AddMemoryPressure/RemoveMemoryPressure 告知非托管内存,GC.GetGCMemoryInfo 用于自适应降载。
- 内存分析:dotMemory 的堆快照对比与 Sunburst、Dominator tree、Survived objects 视图;PerfView 的 GCCollectOnly、ClrEvents:GC+Stack 采集与 GCStats、GC Heap Alloc Stacks 视图。
使用方式:通过 .csproj 的 ServerGarbageCollection 或 runtimeconfig.json 的 System.GC.Server、System.GC.Concurrent、System.GC.DynamicAdaptationMode、System.GC.Regions 配置 GC;代码中使用 ArrayPool/MemoryPool、IMemoryOwner、WeakReference、IDisposable 等模式;用 dotnet-counters、dotMemory、PerfView 进行监控与分析。
适用场景:ASP.NET Core 服务、控制台与桌面应用、批处理、高核心数服务器、原生互操作与文件/网络 I/O 缓冲、内存泄漏与高分配热点排查。
限制与边界:不涵盖 Span/Memory 语法入门与基础用法、微基准测试搭建、CLI 诊断工具(dotnet-counters、dotnet-trace、dotnet-dump)以及 Channel 生产者/消费者模式,这些分别由其他技能覆盖。资料未提供具体收费、价格与平台信息。