Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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