최적화 과정에서 사용했던 방법들을 정리하는 글이다.
Window > Analysis > Profiler
메모리 누수가 발생했을때 원인이 되는 리소스를 파악하기 좋았다.
더 디테일하고 다양하게 사용하는 방법이 많은 것 같은데 아직 그렇게는 써보지 못했다.
텍스처나 머테리얼은 해당 리소스를 사용한 오브젝트가 파괴되어도 메모리에 남아있다.
따라서 주기적으로 정리할 필요가 있었다.
Resources.UnloadUnusedAssets();
주변에 존재하는 캐릭터 수가 일정 기준을 넘어서거나,
일정 시간이 되면 주기적으로 GC를 수집하도록 했다.
GC.Collect();
WaitForSeconds 대기 코루틴을 사용할때 캐싱해서 사용했다.
public static WaitForSeconds endSeconds = new WaitForSeconds(0.15f);
private static Dictionary<float, WaitForSeconds> delayDictionary = new Dictionary<float, WaitForSeconds>();
public static WaitForSeconds GetWaitForSeconds(float seconds)
{
delayDictionary.TryAdd(seconds, new WaitForSeconds(seconds));
return delayDictionary[seconds];
}
Destroy(obj);
obj = null;
참조를 제거해 GC 수집 대상에 들어갈수 있도록 처리.
사용하지 않는 Update(), Start() 등 제거.
함수 내부가 비어있더라도 남아있는한 매 프레임마다 호출하므로 지워야 한다.
참고할만한 유니티 공식문서
👀 https://www.unitysquare.co.kr/growwith/resource/form?id=154
👀 https://www.unitysquare.co.kr/growwith/unityblog/webinarView?id=348