메모리 및 범위 관련 형식
.NET Core 2.1부터 .NET에는 임의 메모리의 인접한 강력한 형식의 영역을 나타내는 여러 개의 상호 연결된 형식이 포함되어 있습니다. 여기에는 다음이 포함됩니다.
System.Span<T> - 메모리의 인접한 영역에 액세스하는 데 사용되는 형식입니다. Span<T> 인스턴스는
T
형식 배열, String, stackalloc로 할당된 버퍼 또는 관리되지 않는 메모리에 대한 포인터를 통해 지원할 수 있습니다. 스택에 할당되어야 하므로 여러 가지 제한 사항이 있습니다. 예를 들어 클래스의 필드는 Span<T> 형식일 수 없으며, 비동기 작업에 범위를 사용할 수도 없습니다.System.ReadOnlySpan<T> - 변경할 수 없는 Span<T> 구조체 버전입니다.
System.Memory<T> - 메모리의 연속 영역에 관한 래퍼입니다. Memory<T> 인스턴스는
T
또는 String 형식의 배열이나 메모리 관리자로 지원할 수 있습니다. 관리되는 힙에 저장할 수 있어 Memory<T>에는 Span<T>의 제한 사항이 없습니다.System.ReadOnlyMemory<T> - 변경할 수 없는 Memory<T> 구조체 버전입니다.
System.Buffers.MemoryPool<T> - 메모리 풀에서 강력한 형식의 메모리 블록을 소유자에게 할당합니다. IMemoryOwner<T> 인스턴스는 MemoryPool<T>.Rent을 호출하여 풀에서 대여하고, MemoryPool<T>.Dispose()을 호출하여 다시 풀로 해제할 수 있습니다.
System.Buffers.IMemoryOwner<T> - 메모리 블록의 소유자를 나타내고 해당 수명 관리를 제어합니다.
MemoryManager<T> - SafeHandle 등의 추가 형식을 통해 Memory<T>를 지원할 수 있도록 Memory<T>의 구현을 바꾸는 데 사용할 수 있는 추상 기본 클래스입니다. MemoryManager<T>는 고급 시나리오를 위한 것입니다.
ArraySegment<T> - 특정 인덱스에서 시작하는 특정 개수의 배열 요소에 대한 래퍼입니다.
System.MemoryExtensions - 문자열, 배열 및 배열 세그먼트를 Memory<T> 블록으로 변환하기 위한 확장 메서드 컬렉션입니다.
System.Span<T>, System.Memory<T> 및 그 읽기 전용 상대는 메모리를 복사하거나 관리되는 힙에 필요 이상으로 할당되는 것을 방지하는 알고리즘을 생성할 수 있도록 설계되었습니다. 이러한 항목을 만들 때(Slice
또는 해당 생성자를 통해) 기본 버퍼를 복제하는 작업과 관련되지 않아 래핑된 메모리의 "뷰"를 나타내는 관련 참조 및 오프셋만 업데이트됩니다.
참고
이전 프레임워크의 경우 System.Memory NuGet 패키지에서 Span<T> 및 Memory<T>를 사용할 수 있습니다.
자세한 내용은 System.Buffers 네임스페이스를 참조하세요.
메모리 및 범위 작업
메모리 및 범위 관련 형식은 일반적으로 데이터를 처리 파이프라인에 저장하는 데 사용되므로 개발자가 Span<T>, Memory<T> 및 관련 형식을 사용할 때 모범 사례 세트를 따르는 것이 중요합니다. 이러한 모범 사례는 메모리<T 및 Span<T>> 사용 지침에 설명되어 있습니다.