Zero Allocation Essentials
1. Span Basics
// String slicing (no Heap allocation)
ReadOnlySpan<char> part = text.AsSpan(0, 10);
// Array slicing
Span<int> span = data.AsSpan();
Span<int> firstHalf = span[..^(span.Length / 2)];
2. ArrayPool
// Rent array
var buffer = ArrayPool<byte>.Shared.Rent(size);
try
{
ProcessBuffer(buffer.AsSpan(0, size));
}
finally
{
ArrayPool<byte>.Shared.Return(buffer);
}
3. stackalloc
// Allocate small buffer on Stack
Span<byte> buffer = stackalloc byte[256];
4. Important Notes
- Span cannot be used with async-await
- ArrayPool: Must call Return after Rent
For details: See
/dotnet-zero-allocationskill