ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C#의 메모리 관리와 성능 최적화 기법
    카테고리 없음 2024. 7. 8. 19:46

    유니티 게임개발캠프 TIL 52일차

     

    1. 문자열 처리의 메모리 문제

    오늘 배운 것 중 하나는 문자열 처리에서의 메모리 문제입니다. 문자열은 불변(immutable) 타입이기 때문에, 매번 로그 메시지를 추가할 때마다 새로운 문자열 객체가 생성됩니다. 이렇게 하면 메모리 사용량이 늘어나고 성능이 저하됩니다.

    2. StringBuilder 사용의 장점

    이 문제를 해결하기 위해 StringBuilder를 사용하는 것이 권장됩니다. StringBuilder는 가변(mutable) 문자열을 효율적으로 처리하여, 새로운 객체를 계속 생성하지 않으므로 메모리 사용량이 줄어들고 성능이 향상됩니다. 특히 반복적인 문자열 조작 작업에서 큰 성능 이점을 제공합니다.

    3. 가비지 컬렉터(Garbage Collector)

    가비지 컬렉터는 사용되지 않는 메모리를 자동으로 회수하여 프로그램의 메모리 관리를 돕는 시스템입니다. 이는 개발자가 명시적으로 메모리를 해제하지 않아도 되므로 메모리 누수를 방지하고, 메모리 관리를 자동화하여 개발자의 부담을 줄여줍니다. 그러나 가비지 컬렉션이 실행될 때 일시적으로 프로그램의 성능이 저하될 수 있으며, 제어할 수 없는 시점에 메모리 해제가 발생할 수 있는 단점이 있습니다.

    4. 가비지 컬렉터의 세대(Generation) 개념

    가비지 컬렉터는 메모리를 효율적으로 관리하기 위해 객체를 세대(Generation)로 구분합니다. 일반적으로 세대는 0, 1, 2로 나뉘며, 세대 0은 최근에 생성된 객체, 세대 2는 오래된 객체를 의미합니다. 세대별로 가비지 컬렉션 빈도가 다르며, 세대 0이 가장 빈번하게 수집됩니다.

    5. 박싱(Boxing)과 언박싱(Unboxing)

    박싱과 언박싱은 값 형식 데이터를 참조 형식으로 변환하거나 그 반대로 변환하는 과정입니다. 이 과정은 성능 비용이 크기 때문에 빈번하게 발생하지 않도록 주의해야 합니다. 박싱은 값 형식을 힙에 저장된 참조 형식으로 변환하고, 언박싱은 참조 형식을 값 형식으로 변환하는 과정입니다.

    6. 오브젝트 풀(Object Pool)의 사용

    오브젝트 풀은 객체를 재사용하여 메모리 할당과 해제 비용을 줄이고, 가비지 컬렉션 부담을 감소시킵니다. 이를 통해 메모리 사용 효율이 높아지고 성능이 향상됩니다. 객체를 반복적으로 생성하고 파괴하는 대신, 미리 생성해둔 객체를 재사용함으로써 메모리 관리가 보다 효율적으로 이루어집니다.

    요약

    • 문자열 처리에서 StringBuilder를 사용하면 메모리 사용량을 줄이고 성능을 향상시킬 수 있습니다.
    • 가비지 컬렉터는 메모리를 자동으로 관리하여 개발자의 부담을 줄이지만, 실행 시 성능 저하가 발생할 수 있습니다.
    • 객체를 세대로 구분하여 효율적으로 가비지 컬렉션을 수행합니다.
    • 박싱과 언박싱은 성능 비용이 크기 때문에 주의가 필요합니다.
    • 오브젝트 풀은 객체를 재사용하여 메모리 관리와 성능 최적화에 도움이 됩니다.
Designed by Tistory.