[C#] ArraySegment<T> Struct

C# 2023. 8. 27. 23:11
728x90

ArraySegment <T>는 배열을 다루기 위해 만들어진 것으로 배열의 특정 범위의 내용을 가리키고 조작하는 것이 가능하며, 메모리 복사 없이 데이터를 공유하고 처리할 수 있습니다.

int[] array = { 1, 2, 3, 4, 5 };

ArraySegment<int> segment = new ArraySegment<int>(array, 1, 3);

위처럼 ArraySegment <T> 로 정의하게 되면 array의 내용을 index  1~3까지의 내용(2,3,4)을 가지고 있게 됩니다. Array에 원본 데이터도 가지고 있습니다.

생성 시 타입인자 형식의 배열을 복사하지 않고 해당 배열의 참조만 가져와 할당하게 되므로 메모리를 효율적으로 관리하면서 내부 내용을 원하는 범위만큼 가져오거나 조작할 수 있게 됩니다.

배열타입의 Buffer를 사용할 경우 ArraySegment<T>를 사용하면 별도의 메모리 할당 없이 원하는 크기만큼의 Buffer를 가져와 사용할 수 있게 됩니다.

주의할 점은 참조를 가지고 있는 것이므로 원본이 사라지기 전에 사용을 끝내야 합니다.

아래처럼 값도 변경이 가능합니다.

segment.Array[1] = 10;

결과
Modified Array: 1 10 3 4 5 

위처럼 바꿨다면 앞서 ArraySegment <T> 생성 시 잘라낸 결과 데이터가 2 3 4에서 10 3 4로 바뀌게 됩니다.

 

728x90
Posted by kjun.kr
,