SuperAPI AI 工具集

dotnet-performance-patterns

通用与其它

查看项目

更新于 10-16 00:21

技能介绍

面向 .NET 应用的性能导向架构模式,重点讲“为什么”与如何测量,而非语法本身,基线为 .NET 8.0+(Span<T>/Memory<T> 自 .NET Core 2.1+ 可用,但本技能面向 .NET 8+ 的现代用法)。

主要能力:

  1. Span<T>/Memory<T> 零分配:用 ReadOnlySpan<char> 切片替代 Substring,避免解析 HTTP 头、日志行、CSV 时的分配;Span 不可用于 async 或存堆,需异步 I/O、字段存储或跨方法返回时改用 Memory<T>,再取 .Span 同步处理。
  2. ArrayPool<T>:租借/归还缓冲避免 GC 压力与 LOH,需用 try/finally 归还,注意 Rent 返回的缓冲区可能更大,应使用实际读取长度,敏感数据用 clearArray: true。
  3. struct 设计:readonly struct 消除 JIT 防御性复制;ref struct 仅限栈上、不可装箱、不可用于 async;大于 16 字节的只读结构体用 in 传参,非只读 struct 避免 in。
  4. sealed 类:JIT 可去虚化并内联,减少 vtable 查找与调用开销;若通过接口变量访问且调用点无法去虚化则无收益。
  5. stackalloc:小且固定大小的栈缓冲,建议 <1 KB、最大不超过 4 KB,禁止用不受信任输入的可变长度;可用 stackalloc 加 ArrayPool 回退的混合模式。
  6. 字符串:内部比较用 StringComparison.Ordinal/OrdinalIgnoreCase;仅对已知有界集合用 string.Intern(驻留字符串不被回收,勿用于用户输入);少次拼接用插值,循环用 StringBuilder,固定格式可用 string.Create,高吞吐格式化用 Span<char>+TryFormat。

使用方式:先测量再优化,用基准工具建立基线并开启内存诊断查看分配列,一次只改一处并复测;优化前确认热路径,涉及 Native AOT 时需验证裁剪安全,并记录权衡。

限制与边界:不涵盖 Span/record/模式匹配等语法细节、编码规范与命名、微基准搭建、Native AOT 编译与裁剪、序列化性能权衡、缓存/弹性/DI 架构模式及 EF Core 查询优化,这些由配套技能负责。资料未提供安装命令、收费信息或具体价格。