Span<T>는 읽고 쓸 수 있는 유사 참조 구조체인데, 메모리 소유와 관련된 개념 없이 마치 배열처럼 메모리 특정 위치를 인덱스를 이용하여 참조할 수 있다. 스팬(span)은 항상 다른 것(포인터, 배열, 스택을 이용해서 직접 생성한 데이터 등)을 기반으로 생성된다. Span<T>를 이용하면 메모리 할당 위치를 신경 쓰지 않아도 된다. 스팬은 쪼개어 쓸 수도 있어서 다른 스팬의 일부 영역만 가지는 스팬을 데이터를 복사하지 않고 추가로 생성할 수 있다. 새롭게 출시된 프레임워크에서는 JIT 컴파일러가 이미 Span<T>에 대해서 이해하고 있으며, 이를 고도로 최적화된 방식으로 처리한다.
Span<T>가 유사 참조 타입이라는 점과는 상관없이 이 타입은 고유한 두 가지 이점을 가진다.
• 스팬이 참조하는 메모리는 스택을 벗어날 수 없으므로 메모리의 수명 주기를 엄밀하게 관리한다. 메모리를 할당하는 코드는 스팬을 통해 메모리를 다른 코드에 전달하고, 할당되지 않은 메모리를 참조하는 스팬이 남지 않을 것이라는 확신을 가지고 메모리를 삭제할 수 있다.
• 스팬을 이용하면 메모리를 복사하거나 향후 데이터가 변경될 것을 걱정하지 않고, 사용자가 원하는 방식으로 초기화할 수 있는 한 번의 기회를 가진다.
임의의 문자열을 생성하는 코드를 작성하여 이 두 가지 장점을 살펴보자. 임의의 문자열을 생성하는 방법으로 Guid.NewGuid를 종종 사용하곤 하지만, 생성할 문자열에 포함할 문자와 문자열의 길이를 좀 더 다양하게 하기 위해서 완전히 다른 방법을 사용할 수도 있다. 다음 예제는 예전에 많이 사용했던 전형적인 코드의 예다.