用途:在设计新的类型与 API、审查代码性能问题、在 class、struct、record 之间取舍,以及处理集合与可枚举对象时使用,帮助降低分配与 GC 压力并优化 API 形态。
主要能力:提供 struct 与 class 决策矩阵(按大小、生命周期、标识、可变性、继承、可空语义、集合用法取舍;建议不超过 16 字节为理想 struct,超过 64 字节倾向 class);建议库类型默认 sealed 以利 JIT 去虚拟化,并列出不应密封的场景;推荐 readonly struct 以消除 in 参数和只读字段访问时的防御性拷贝,附检查清单;对比 record class 与 record struct;提倡静态纯函数;建议延迟枚举,避免多次 ToList(),并讨论 IAsyncEnumerable 与 ValueTask 与 Task 的取舍;给出 ref struct 约束与 Span<T> 与 Memory<T> 选择流程(异步或长期存储用 Memory<T>,同步零开销热路径用 Span<T>);整理集合类型选择矩阵,含 FrozenDictionary、ImmutableDictionary、ConcurrentDictionary、Dictionary、SortedDictionary 及只读接口返回;列出常见反模式与易错点。
使用方式:该技能以设计准则与决策矩阵形式给出,配合 C# 代码片段示例;资料未提供安装命令或调用命令。可结合参考资料使用:https://learn.microsoft.com/en-us/dotnet/standard/performance/、https://learn.microsoft.com/en-us/dotnet/standard/memory-and-spans/、https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen。
适用场景:.NET 类型与 API 设计评审、性能敏感路径的类型与集合选型、异步与内存处理相关的重构。
限制:FrozenDictionary 等属 .NET 8+;FrozenDictionary 无增删 API,不适用于可变数据;Span<T> 不能用于异步方法或字段存储;资料未提供基准数据、收费标准或确切版本支持差异。