본문 바로가기

C#

C# System.Buffers.ArrayPool<T>로 메모리 재활용하기

메모리 할당과 해제는 성능에 큰 영향을 미칩니다. 특히 배열을 자주 생성하고 버리는 코드에서는 더욱 그렇습니다. C#의 System.Buffers.ArrayPool<T>를 사용하면 배열을 재활용해 메모리 할당 횟수를 줄일 수 있습니다.

1. ArrayPool<T> 개요

ArrayPool<T>는 배열을 풀에서 빌리고 반납하는 방식으로 동작합니다. 필요할 때 배열을 새로 생성하지 않고, 이미 할당된 배열을 재사용합니다.

2. 기본 사용법

// 배열 풀에서 배열 빌리기
var pool = System.Buffers.ArrayPool<byte>.Shared;
byte[] buffer = pool.Rent(1024); // 최소 1024 크기의 배열 빌림

// 배열 사용
// ...

// 배열 반납
pool.Return(buffer);

3. 장점과 주의점

반복적으로 배열을 할당하지 않아 GC 부담이 줄고, 성능이 향상됩니다. 다만 배열을 사용 후 반드시 Return()으로 반납해야 하며, 재사용 후 이전 데이터를 초기화해야 할 경우 삭제 옵션을 사용하거나 별도로 초기화해야 합니다.

4. 요약

ArrayPool<T>를 통해 배열 할당 비용을 줄이고 메모리를 효율적으로 관리할 수 있습니다. 고성능이 요구되는 네트워크, 파일 I/O 등에 활용하면 좋은 결과를 얻을 수 있습니다.