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
'C#' 카테고리의 다른 글
[C#] 현재 컴퓨터의 OS 종류 및 버전 가져오기 (0) | 2023.09.16 |
---|---|
[C#] Public IP 주소 가져오기 (0) | 2023.08.28 |
[C#] CsvHelper 사용하기 (CsvWriter CsvReader) (0) | 2023.08.07 |
[C#/Dapper] 42601: syntax error at or near “$1″ 에러 (0) | 2023.07.16 |
[C#/NATS] nats streaming server (0) | 2023.07.10 |