Span和Memory是C# 7.2引入的高性能内存抽象,Span为栈上安全的内存视图,零开销操作连续内存;Memory可跨作用域使用,支持async和字段存储,配合MemoryPool实现零拷贝与缓冲复用,显著降低GC压力,适用于高频数据处理场景。

Span
Span:栈上安全的“内存视图”
Span
- 支持从 T[]、string、stackalloc T[]、非托管指针等创建
- 切片(Slice)、索引、遍历都零开销,不产生新分配
- 常见用途:解析字节流、字符串切片、高性能序列化/反序列化
- 示例:Span
data = stackalloc byte[256]; data.Slice(0, 128);
Memory:可跨作用域的“托管内存视图”
Memory
- 比 Span
稍重(有虚方法调用开销),但保留了大部分零分配优势 - 配合 ReadOnlyMemory
使用更安全,防止意外写入 - 典型场景:ASP.NET Core 中的 Request.Body.ReadAsync 接收 Memory
,Kestrel 直接复用缓冲池
为什么它们能提升性能?
传统方式(如 string.Substring、Array.Copy)常触发堆分配或数据复制,而 Span/Memory 让你直接操作原始内存块:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~