Код: Выделить всё
private byte[] _data;
[Benchmark()]
public void SpanTest()
{
var temp = _data.AsSpan();
var length = BitConverter.ToInt32(temp.Slice(0, 4));
var buffData = temp.Slice(4, length);
var s = buffData[0];
}
[Benchmark()]
public async Task MemoryTest()
{
var temp = _data.AsMemory();
var length = BitConverter.ToInt32(temp.Slice(0, 4).Span);
var buffData = temp.Slice(4, length);
var s = buffData.Span[0];
}

Я не могу понять, почему Span быстрее памяти примерно в 10 раз.
С моей точки зрения, Span выделяется в стеке, но указывает на данные в куче (в моем случае). Память выделяется в куче, и это только одно отличие, которое я здесь вижу. Мой вопрос: почему Спан такой быстрый? Я читал о ref-структурах, но не понимал, как они работают.
Подробнее здесь: https://stackoverflow.com/questions/759 ... n-10-times
Мобильная версия