减少 GC 压力、支持异步流、构建零分配高性能服务的三大核心利器!
随着 .NET 的持续演进,Span
和 Memory
成为了处理高性能数据操作的关键利器。它们通过 零分配(zero-allocation) 和 切片视图(slice view) 的方式,极大提高了对字符串、数组、缓冲区等处理的性能。
本文将结合 .NET 8 的实际应用,介绍 Span
和 Memory
的使用场景、注意事项以及典型示例。同时,我们也会介绍 ArrayPool
的实战技巧,进一步实现真正的高性能零分配数据处理。
await
后继续用。
ReadOnlySpan
是Span
的只读版本,常用于方法参数中,防止修改传入数据,提高安全性。本文示例中的csv.AsSpan()
实际类型即为ReadOnlySpan
。
⚠️ 本例为简化演示版,未处理带引号或转义的复杂 CSV 字段
public static List<string> ParseCsvLine(ReadOnlySpan<char> line)
{
Span<int> positions = stackalloc int[32];
int count = 0;
for (int i = 0; i < line.Length && count < positions.Length; i++)
{
if (line[i] == ',')
positions[count++] = i;
}
var result = new List<string>(count + 1);
int start = 0;
for (int i