Это новый тип, представляющий непрерывные области произвольной памяти, он абстрагируется по всем типам памяти в .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› можно хранить в куче.