피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Managed Heap 할당 최소화를 통한 GC Spike 제거 및 Frame Rate 안정화
Unity Devs: Stop Starving Your Frame Rate!
AI 요약
Context
Unity 게임 개발 중 빈번한 Managed Heap 할당으로 인한 Garbage Collection(GC) 발생 및 CPU 오버헤드 증가. 이로 인해 프레임 드롭과 스터터링 현상이 발생하는 성능 병목 지점 식별.
Technical Solution
- Immutable 특성을 가진 String의 반복적 결합을 피하기 위해 StringBuilder를 활용한 정적 버퍼 재사용 구조 설계
- 임시 버퍼 생성 시 발생하는 Heap 할당을 억제하기 위해 ArrayPool를 통한 메모리 렌탈 및 반납 메커니즘 도입
- ArrayPool로 확보한 원시 배열에 대해 Span를 적용하여 복제 없는 고성능 메모리 뷰(View) 제공
- LINQ의 Enumerator 생성 및 임시 컬렉션 할당 비용을 제거하기 위해 사전 할당된 List를 전달하는 Manual Iteration 패턴 적용
- 데이터 중심 설계(Data-Oriented Mindset)를 통한 런타임 할당 최소화 및 메모리 생명 주기 직접 제어
실천 포인트
- Hot Path 내 String Concatenation(+) 사용 지양 및 StringBuilder 재사용 검토 - 단기 사용 버퍼 필요 시 new Array 대신 ArrayPool<T>.Shared.Rent() 적용 - 배열 슬라이싱이나 부분 참조 시 복사본 생성 대신 Span<T> 활용 - Update 루프 내 LINQ 쿼리 제거 및 결과 저장용 List<T>의 Clear-Add 패턴 적용