深入理解 Span :高效处理连续元素的利器
一、Span 简介
System.Span<T> 是一种值类型,用于表示在内存中连续存储的 T 类型元素序列。这些元素可以存储在数组、字符串、栈帧中分配的托管内存块或非托管内存中。从 .NET 7.0 和 C# 11.0 开始,无需使用不安全代码,就可以创建引用单个字段或变量的单元素跨度。
1.1 基本使用
Span<T> 封装了指向内存中数据起始位置的指针及其长度。访问跨度内容的方式与数组类似,如下例所示:
static int SumSpan(ReadOnlySpan<int> span)
{
int sum = 0;
for (int i = 0; i < span.Length; ++i)
{
sum += span[i];
}
return sum;
}
由于 Span<T> 知道自身长度,其索引器会检查索引是否在范围内,性能与内置数组相似。例如,CLR 会识别上述循环模式,生成无需每次检查索引范围的代码。不过,在 .NET Framework 中, Span<T> 比数组稍慢,因为其 CLR 未对 Span<T> 进行优化。
超级会员免费看
订阅专栏 解锁全文
539

被折叠的 条评论
为什么被折叠?



