unity CG 작동 원리와 최적화 기법

개발자 이야기

unity CG 작동 원리와 최적화 기법

kilius 2023. 3. 17. 18:19
728x90
반응형

Unity의 GC(Garbage Collection)는 .NET 프레임워크에서 사용되는 가비지 컬렉터를 기반으로 동작합니다. C# 언어와 마찬가지로, Unity도 .NET 가비지 컬렉터를 사용하여 자동적으로 메모리를 관리합니다.

Unity에서는 GC가 불필요한 객체를 수집하기 위해 두 가지 방식을 사용합니다. 첫째, Mark-and-Sweep 방식으로, GC가 가비지 컬렉터를 실행하여 프로그램에서 더 이상 사용되지 않는 객체를 탐색합니다. GC가 이러한 객체를 찾으면, 해당 객체를 가비지 컬렉션 리스트에 표시하고 메모리를 해제합니다.

둘째, Reference Counting 방식으로, GC가 객체의 참조 횟수를 추적하여 객체가 더 이상 사용되지 않을 때 메모리를 해제합니다. Unity에서는 이 방식을 주로 사용하지 않지만, 일부 객체에서는 참조 횟수 추적이 사용됩니다.

Unity에서 GC가 동작하는 방식은 다음과 같습니다.

1. Unity가 실행 중에 사용되는 모든 객체를 추적합니다.
2. GC가 실행될 때마다, 사용되지 않는 객체를 찾아서 메모리를 해제합니다.
3. 객체가 참조되는 동안 GC는 해당 객체를 메모리에 유지합니다.
4. GC가 가비지 컬렉션을 실행할 때마다, 메모리 해제 작업은 다소 느려질 수 있습니다.
5. 이를 최적화하기 위해서는 불필요한 객체 생성을 피하고, 임시 객체를 최소화해야 합니다.

Unity에서 GC가 동작하는 방식은 .NET 가비지 컬렉터와 유사합니다. 하지만 Unity에서는 메모리 관리를 위한 특별한 기능을 제공하므로, Unity를 사용하는 개발자는 이러한 기능을 최대한 활용하여 GC의 성능을 향상시킬 수 있습니다.

 

Unity에서 GC (Garbage Collection) 최적화를 위한 기법에는 다음과 같은 것들이 있습니다.

1. 오브젝트 풀링 (Object Pooling)
게임 내에서 자주 사용되는 객체를 미리 생성해두고, 필요할 때마다 재사용하는 방식입니다. 이를 통해 GC가 발생하지 않도록 하고, 프로그램 성능을 향상시킬 수 있습니다.

2. 리스트 사이즈 초기화 (List Capacity Initialization)
List를 사용할 때, 초기화된 크기에 맞게 사용하면 GC가 발생하지 않습니다. 예를 들어, List<int> myList = new List<int>(10); 처럼 생성자에서 초기 크기를 지정하면 myList에 요소를 추가할 때마다 메모리가 할당되지 않고, 미리 할당된 메모리에 요소를 추가합니다.

3. 스트링 연산 최적화 (String Concatenation Optimization)
스트링 연산은 GC를 유발하는 주요 원인 중 하나입니다. 여러 스트링을 합치는 경우에는 StringBuilder 클래스를 사용하여 메모리 할당 횟수를 줄일 수 있습니다.

4. 임시 객체 최적화 (Temporary Object Optimization)
임시 객체를 사용할 때마다 GC가 발생하는 것을 피하기 위해서는, 불필요한 객체 생성을 최소화해야 합니다. 예를 들어, Vector3 v = new Vector3(1, 2, 3); 대신, Vector3 v = Vector3.zero; 와 같이 불필요한 객체 생성을 피할 수 있습니다.

5. 메모리 해제 (Memory Deallocation)
불필요한 객체를 해제하여 GC가 발생하지 않도록 하는 것이 중요합니다. 예를 들어, Texture2D 객체를 사용한 후에는 반드시 Destroy 메소드를 호출하여 메모리를 해제해야 합니다.

위와 같은 GC 최적화 기법을 사용하여 Unity 프로그램의 성능을 개선할 수 있습니다. 더불어, 불필요한 GC 발생을 피하기 위해서는 프로그램을 설계할 때 GC 최적화를 고려하여야 합니다.

 

728x90
반응형