Game Development

Unity Update 호출할 때, 사용되는 비용! 본문

Unity/Performance

Unity Update 호출할 때, 사용되는 비용!

Dev Owen 2021. 6. 26. 01:21

Update 호출 시, 소모되는 비용!

해당 실험은 2015년 말쯤에 타 블로그에서 1만번 업데이트 호출하는 테스트에 대한 글이 올라와 있습니다.

해당 실험을 현 시점 다시 진행해 볼려고 합니다.

또한 타 블로그에서 진행되었던 테스트가 신기하여 따라하고 포스팅 하는것 입니다.

 

이 Update함수를 코드 상에 적어두기만 해도 Update를 계속 호출하기에 많은 비용을 먹게 된다는 말입니다.


테스트

Update 호출의 비용을 알아보기 위해 테스트를 진행하는데, 1만개의 업데이트를 호출하는데 걸리는 시간을 체크해보도록 하겠습니다.

 

총 3가지의 테스트를 진행해보도록 하겠습니다.

 

1. Unity Update Message를 이용한 방식

private void Update() 
{
    count++;
}

2. Coroutine을 이용한 방식

private void Start() 
{
    StartCoroutine( UpdateCor() );
}

private IEnumerator UpdateCor()
{
    while ( true )
    {
        yield return new WaitForEndOfFrame();
    }
}

3. Update Maanger를 이용한 방식

interface CustomUpdate
{
    void CustomUpdate();
}

private CustomUpdate[] customUpdates;

private void Update() 
{
    foreach( var update in customUpdates )
    {
        update.CustomUpdate();
    }    
}

시간 측정

Update 콜과 LateUpdate 콜 사이의 시간을 Stopwatch로 측정했습니다.

private void Update() 
{
    if ( Time.time < startTime )   
        return;

    sw.Start();
}

private void LateUpdate() 
{
    if ( Time.time < startTime )
        return;
    sw.Stop();
    updateCount++;
    frameTime = sw.ElapsedTicks;
    totalTime += frameTime;
    sw.Reset();
}

private IEnumerator Log()
{
    WaitForSeconds delay = new WaitForSeconds(1f);

    while ( true )
    {
        yield return delay;

        if ( updateCount > 0 )
        {
            UnityEngine.Debug.Log( $"{ totalTime / updateCount / Stopwatch.Frequency * 1000 } {frameTime / Stopwatch.Frequency * 1000} ");
        }
    }
}

테스트 결과

결과가 충격적입니다.

1번 Unity Update Message를 이용한 방식 3.4ms

2번 Corutine을 이용한 방식 0.14ms

3번 업데이트 매니저를 이용한 방식 0.01ms

1. 일반적인 Update 방식 2. Corutine을 이용한 방식 3. Update Manager를 이용한 방식
3.4ms 0.14ms 0.01ms

딱 봐도 Update를 이용한 방식이 정말 많이 드는 것을 알 수 있습니다. 약 20배 정도 입니다.


결론

앞으로 개발을 하는데 있어 Update함수보다 코루틴 함수를 사용하는것이 더욱 효율적이게 될거 같네요

한 번 여러분들도 직접 실험해 보시면 재미있을겁니다.

1만개를 처리하는데 3.4ms 정도이지만 1만개가 아닌 1억개라고 생각했을땐 무시 못하게 될것이고, 이 조금의 시간이 모여서 성능의 문제가 생길 수 있게 됩니다.

 

Comments