Span<T> 与 Memory<T>
Span<T> 和 Memory<T> 是 .NET Core 2.1 引入的高性能类型,表示一段连续内存的视图。它可以指向数组、字符串、栈内存,避免不必要的复制。
最常见的用途:解析字符串时不用 Substring 创建新字符串,直接 Slice 出一段 Span<char>。性能好很多,特别是处理大文本。
注意:Span<T> 是 ref struct,不能作为字段、不能 await、不能到闭包里。要长期存用 Memory<T>。
代码示例
// 从字符串创建 Span(不分配新字符串)
ReadOnlySpan<char> text = "2024-09-15";
// Slice 不创建新字符串
ReadOnlySpan<char> year = text.Slice(0, 4); // "2024"
ReadOnlySpan<char> month = text.Slice(5, 2); // "09"
ReadOnlySpan<char> day = text.Slice(8, 2); // "15"
Console.WriteLine(year.ToString()); // 2024
// 解析数字
ReadOnlySpan<char> numStr = "12345";
int num = int.Parse(numStr); // 不分配中间字符串
// 处理数组
int[] arr = { 1, 2, 3, 4, 5 };
Span<int> span = arr.AsSpan();
span.Slice(1, 3).Fill(0); // arr = {1, 0, 0, 0, 5}
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。