1. Span<T>的特性
- system.span<T>在.net core 2.0版本引入
- 它适用于对连续内存的操作,而不产生新的内存分配,比如数组、字符串、堆外内存
- 类型为ref struct,不能作为参数传递,不能被装箱(不能作为类的字段),不能作为async的返回值,只能是现用现声明,用来对原始数组操作
- 可以通过stackalloc在栈上分配内存,不涉及堆分配和垃圾回收
- 因为不涉及堆内存分配,所以性能比较高
1.1 Span<T> 的一些典型用法示例:
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 获取一个数组切片slice,现在指向 numbers 的子区域,包含元素 2, 3, 4, 5, 6
Span<int> slice = numbers.AsSpan().Slice(start: 2, length: 5);
string str = "Hello, World!";
//获取字符串的一个切片,span 现在指向字符串 "World"
//注意:这里使用 ReadOnlySpan<char> 因为字符串是不可变的
ReadOnlySpan<char> span = str.AsSpan().Sli