코루틴은 생각보다 가비지를 자주 생성한다.

이는 가비지 컬렉터의 좋은 먹잇감이 된다. 코루틴을 자주 사용하는 로직에서 이를 최적화하지 않는다면,

GC의 collet에서 프레임이 상당히 떨어질 수 있다.

 

StartCoroutine & YieldInstruction 부분에서 주로 가비지가 생성된다.

 

StartCoroutine

메서드를 호출하는 순간 엔진 내부에서 인스턴스가 생성되면서 가비지 컬렉터의 먹이가 된다.

StartCoroutine 자체는 유니티 엔진 내부 코드기 때문에 이를 최적화하는 것은 불가능하다.

 

YieldInstruction

코루틴 내부에서 yield 구문에 사용되는 값이다. 크게 3가지를 사용한다.

WaitForEndOfFrame
WaitForFixedUpdate
WaitForSeconds;

yield return new WaitForEndOfFrame() 과 같이 사용하는 것이다.

 

이 때 yield 구문 자체는 가비지를 생성하지 않으나, YieldInstruction을 new를 통해

인스턴스를 생성해서 사용해야 하므로 이 때 가비지를 생성한다.

때문에 yieldInstruction 을 캐싱만 하더라도 가비지가 생기지 않는다.

 

아래와 같이 캐싱할 수 있다.

 

 

WaitForSeconds

WaitForSeconds의 경우 float값에 따라 인스턴스가 달라지기 때문에,

아래와 같이 캐싱해야 한다. (float의 값이 고정되어 있지 않을 경우)

 

ejonghyuck.github.io/blog/2016-12-12/unity-coroutine-optimization/

 

 

'공부 > 개념 & 유용한 내용' 카테고리의 다른 글

에디터 코루틴  (0) 2023.03.30
Caching (캐싱) 이란?  (0) 2020.09.25
CDN 이란?  (0) 2020.08.31
Json 이란?  (0) 2020.08.28
유니티 라이프 사이클 & 코루틴 정리  (0) 2020.08.27

+ Recent posts