贝利信息

C#怎么使用Span和Memory T C#高性能编程入门

日期:2026-01-09 00:00 / 作者:幻夢星雲
Span 和 Memory 是 C# 7.2 引入的高性能内存操作类型:Span 是栈限定的轻量切片,零分配操作连续内存;Memory 是其可逃逸版本,支持异步和跨作用域使用,二者共同降低 GC 压力、提升访问效率。

Span 和 Memory 是 C# 7.2 引入的核心高性能类型,专为避免堆分配、减少 GC 压力、提升内存访问效率而设计。它们不是“高级技巧”,而是现代 .NET(尤其是 .NET Core 2.1+ / .NET 5+)中编写低开销代码的基础工具。

Span:栈友好的、轻量级的连续内存切片

Span 是一个 ref struct,只能在栈上分配(不能作为字段、不能装箱、不能跨 await 边界),它不拥有内存,只“指向”一段连续的 T 类型数据(如数组、栈内存、非托管内存)。它的核心价值是零分配、零拷贝地操作数据子集。

Memory:可跨作用域、可异步使用的“安全 Span”

Memory 是 Span 的“可逃逸”版本,不是 ref struct,可以作为字段、参数、返回值,也能安全地传入 async 方法。它本身不直接操作内存,而是通过内部的 MemoryManager 或 ArrayPool 等机制管理底层数据。

常见高性能场景与写法

Span/Memory 真正发力的地方,是替代传统字符串拆分、字节处理、序列化/解析等易触发分配的操作。

注意事项与避坑点

强大但有约束,用错会编译失败或运行时报错。

基本上就这些。Span 和 Memory 不是炫技,而是让 C# 真正具备系统级控制力的关键拼图。从替换 Substring、避免 ToArray 开始,慢慢把关键路径“Span 化”,性能提升会非常实在。