用途:本技能是一份面向 .NET 的零分配与内存效率优化指南,目标是减少 GC 压力、实现高性能内存管理,适合高吞吐或低延迟的 .NET API 与服务。
主要能力:涵盖栈与堆分配的区别、ref struct 的栈限定类型概念;核心 API 包括 Span<T>/Memory<T>(栈上切片)、ArrayPool<T>.Shared(数组复用)、DefaultObjectPool<T>(对象池,需 Microsoft.Extensions.ObjectPool)、MemoryCache(内存缓存,System.Runtime.Caching)。
常见用法:用 ReadOnlySpan<char> 替代 Substring 做无分配字符串切分;用 data.AsSpan() 做数组切片;小缓冲区用 stackalloc;大数组通过 ArrayPool<byte>.Shared.Rent(size) 借出、在 try-finally 中用 Return 归还,敏感数据可 Return(buffer, clearArray: true);对象池通过 DefaultPooledObjectPolicy 与 DefaultObjectPool 配置 maximumRetained。Span 无法跨 async-await 使用,也不能装箱、作为类字段或捕获进闭包,此时改用 Memory<T>;Memory<T> 可存字段并用于异步方法,通过 .Span 访问。随包引用示例:Microsoft.Extensions.ObjectPool 9.0.*。
限制与注意:Rent 借出的数组长度可能大于请求值,使用时须限制为请求大小;未归还会导致内存泄漏;本资料未提供具体性能数据、价格或其他平台支持信息。