ArraySegment에 대해 알아보자
기존 배열의 일부분을 가리키는 값 타입 이다.
내부에서 배열을 복사하지 않고 원래 배열의 특정 offset 부터 count 만큼 연속된 요소를 참조한다.
메모리 복사 없이 배열의 일부만 전달하거나 처리할 때 유용하다.
값 타입인 struct 이고 얕은 참조를 한다.
var arr = new int[] { 0,1,2,3,4,5,6,7,8,9 };
var seg = new ArraySegment<int>(arr, 2, 5); // arr[2] ~ arr[6] -> 2,3,4,5,6
var subarr = seg.Array; // 원본 배열의 참조를 얻는다.
Console.WriteLine(seg.Array == arr); // true
Console.WriteLine(seg.Offset); // 2
Consol.WriteLine(seg.Count); // 5
- 큰배열에서 일부만 읽거나 쓰고 싶을 때 (복사 비용 회피)
- 네트워크 통신, 파일 입출력, 대용량 데이터 처리 등 효율적인 메모리 관리를 위해 활용
- 배열의 서브배열을 여러 곳으로 전달하지만 원본을 유지하고 싶을 때