零分配约束内存区域——Span+struct实现连续缓冲区
通过栈分配或池化内存结合只读Span与ref struct,构建完全零GC分配的临时缓冲区。 · 难度:入门 · +10XP
零分配约束内存区
在性能敏感代码(如网络协议解析)中,每次new byte[]都会产生GC压力。本教程演示如何利用stackalloc和ArrayPool
public ref struct StackBuffer
{
private Span<byte> _span;
public StackBuffer(int size)
{
_span = size <= 256 ? stackalloc byte[size] : new byte[size];
}
public void Dispose()
{
if (_span.Length > 256)
ArrayPool<byte>.Shared.Return(_span.ToArray());
}
public Span<byte> AsSpan() => _span;
}
// 使用
using var buf = new StackBuffer(100);
var span = buf.AsSpan();
span.Fill(0xAB);