본문 바로가기
개발/기본) 개발용어

개발용어) GC 스파이크(GC Spike)

by 테샤르 2024. 6. 12.

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 : 가비지 컬렉션 베스트 프랙티스 : [링크]

 

가비지 컬렉션 베스트 프랙티스 - Unity 매뉴얼

가비지 컬렉션은 자동으로 작동하지만 프로세스하는 데 CPU 시간이 상당히 많이 소요됩니다.

docs.unity3d.com

 

 

★☆☆☆

 

반응형

댓글