GC 스파이크(GC Spike)
C# 같은 GC(Garbage Collection)이 한번씩 발생하는 과정에서 어플리케이션의 성능이 급격하게 저하되는 현상을 말한다.
프로파일러 상에서 한번씩 높에 잡히는 현상을 볼수있는데 해당 상황을 말한다.
반응형
가비지 컬렉션이 발생하면 CPU 사용량이 급증하기 때문에 응답시간이 길어진다.
간략하게 GC Spike의 원인은 다음과 같다.
< GC Spike 원인 >
Boxing <> UnBoxing 과정으로 인한 메모리 증가
메모리 누수
대용량 객체 할당
사용 이후의 리소스 자원 해제를 하지 않고 쌓이는 경우
< 메모리 누수 해결의 코드 예시 >
public class ResourceHolder : IDisposable
{
private IntPtr unmanagedResource; // 예: 비관리 자원
public ResourceHolder()
{
// 비관리 자원 할당
unmanagedResource = /* 리소스 할당 */;
}
~ResourceHolder()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// 관리되는 리소스 해제
}
// 비관리 자원 해제
if (unmanagedResource != IntPtr.Zero)
{
/* 리소스 해제 */
unmanagedResource = IntPtr.Zero;
}
}
}
Unity : 가비지 컬렉션 베스트 프랙티스 : [링크]
★☆☆☆☆
반응형
'개발 > 기본) 개발용어' 카테고리의 다른 글
게임지식) 데미지 플로터(Damage Floater) (1) | 2024.11.24 |
---|---|
개발용어) 모노레포 (Monolithic Repository : 하나의 많은 프로젝트 관리) (0) | 2024.08.01 |
개발용어) 버스 지수(Bus Factor), 트럭 지수(Truck Factor), 로또지수 (Lotter Factor) (0) | 2024.01.30 |
개발지식) 언어 품질 보증 (LQA : Linguistic Quality Assurance) (1) | 2023.12.07 |
개발용어) 존(Zone), 심리스(Seamless) , 룸(Room) (0) | 2023.02.01 |
댓글