Почему Span быстрее памяти в 10 разC#

Место общения программистов C#
Anonymous
Почему Span быстрее памяти в 10 раз

Сообщение Anonymous »

У меня есть массив байтов

Код: Выделить всё

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

Вернуться в «C#»