Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
.NET incluye una serie de tipos interrelacionados que representan una región contigua y fuertemente tipada de memoria arbitraria. Estos tipos están diseñados para permitir la creación de algoritmos que eviten copiar memoria o asignar en el montón administrado más de lo necesario. Crearlos (ya sea a través de Slice, AsSpan(), una expresión de colección o sus constructores) no implica duplicar los búferes subyacentes: solo se actualizan las referencias y desplazamientos pertinentes, que representan la "vista" de la memoria encapsulada. En el código de alto rendimiento, los intervalos se suelen usar para evitar asignar cadenas innecesariamente.
Los tipos incluyen:
System.Span<T>, un tipo que se usa para acceder a una región contigua de memoria. Una Span<T> instancia puede ser respaldada por una matriz de tipo
T, un búfer asignado con stackalloc o un puntero a la memoria no administrada. Como debe asignarse en la pila, tiene una serie de restricciones. Por ejemplo, un campo de una clase no puede ser de tipo Span<T>, ni se puede usar span en operaciones asincrónicas.System.ReadOnlySpan<T>, una versión inmutable de la Span<T> estructura. Las instancias también pueden estar respaldadas por String.
System.Memory<T>, un contenedor en un área de memoria contigua. Una Memory<T> instancia puede estar respaldada por una matriz de tipo
To un administrador de memoria. Como se puede almacenar en el montón administrado, Memory<T> no tiene ninguna de las limitaciones de Span<T>.System.ReadOnlyMemory<T>, una versión inmutable de la Memory<T> estructura. Las instancias también pueden estar respaldadas por String.
System.Buffers.MemoryPool<T>, que asigna bloques de memoria fuertemente tipados de un grupo de memoria a un propietario. Se pueden alquilar instancias de IMemoryOwner<T> del grupo mediante la llamada a MemoryPool<T>.Rent y liberarse de nuevo en el grupo mediante la llamada a MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, que representa al propietario de un bloque de memoria y controla la gestión de su ciclo de vida.
MemoryManager<T>, una clase base abstracta que se puede usar para reemplazar la implementación de Memory<T> para que Memory<T> pueda ser respaldada por tipos adicionales, como identificadores seguros. MemoryManager<T> está pensado para escenarios avanzados.
ArraySegment<T>, un contenedor para un número determinado de elementos de matriz que comienzan en un índice determinado.
System.MemoryExtensions, una colección de métodos de extensión para convertir cadenas, matrices y segmentos de matriz en Memory<T> bloques.
Para obtener más información, vea el espacio de nombres System.Buffers.
Uso de memoria e intervalo
Dado que los tipos relacionados con la memoria y los relacionados con intervalos se usan normalmente para almacenar datos en una canalización de procesamiento, es importante seguir un conjunto de procedimientos recomendados al usar Span<T>, Memory<T>y tipos relacionados. Estos procedimientos recomendados se documentan en las guías de uso de Memory T y Span T.