Это новый тип, представляющий непрерывные области произвольной памяти, он абстрагируется по всем типам памяти в .NET (управляемая, собственная куча или стек).

Ниже приведены особенности Span ‹T›:

  • Детерминированное время жизни - размещено в стеке
  • Предоставляет массивы, такие как API
  • Нарезка без выделения памяти - может указывать на любой поддиапазон памяти, не вызывая выделения
  • Версия только для чтения ReadOnlySpan ‹T› представляет неизменяемые структуры, доступные только для чтения.

Быстрый и медленный просмотр ‹T›

Это просто внутренние представления Span ‹T›. Быстрый интервал полагается на поддержку поля ref и доступен во время выполнения, которое поддерживает интервалы. Это выглядит примерно так:

public struct Span<T> {
    internal ref T _pointer;
    internal int _length;
}

Медленный интервал поддерживает существующее время выполнения, которое не поддерживает поля ссылок или внутренние указатели. Это выглядит примерно так:

public struct Span<T> {
    internal IntPtr _pointer;
    internal object _relocatableObject;
    internal int _length;
}

Память ‹T›

Быть Span ‹T› - это только стек и тип по ссылке - не может быть помещен в коробку или использоваться async await или использоваться в общем аргументе, чтобы преодолеть недостатки. Память ‹T› предоставляется. Память ‹T› можно хранить в куче.