Game Development

Unity 반복문 성능 비교 본문

Unity/Performance

Unity 반복문 성능 비교

Dev Owen 2021. 6. 25. 00:32

반복문 성능비교

유니티를 사용하시면서 많은 반복문을 사용하게 될것 입니다. 그렇기에 가장 성능적으로 반복문 방식이 무엇인지 알아보도록 하겠습니다.

1. For 문과 Foreach 중 무엇이 더 빠를까요?

처음에 많은 사람들이 사용하기 편한 Foreach를 사용하고 있을 수 있습니다.
하지만 아래의 데이터를 보시게 된다면 충격을 받을실 수 있습니다.

 

초기화는 아래와 같이 진행하였습니다.

int count = 100000000;
private void Init()
{
    for ( int i = 0; i < count; i++ )
    {
        value.AddLast(Random.Range(1, 100));
    }
}

테스트 방식

1. 각각 1억번의 반복문을 돌리며 시작 시점에서 부터 끝나는 시점 까지의 시간을 구합니다.
2. 각각의 변수를 참조하여 A라는 변수에 넣어보도록 하겠습니다.

테스트 코드 ( List )

private void ForTime()
{
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    sw.Start();
    int a = 0;
    for (var i = 0; i < value.Count; i++)
    {
        a = value[i];
    }
    sw.Stop();
    Debug.Log((sw.ElapsedMilliseconds.ToString()));
}
private void ForeachTime()
{
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    sw.Start();
    int a = 0;
    foreach (int i in value)
    {
        a = i;
    }
    sw.Stop();
    Debug.Log((sw.ElapsedMilliseconds.ToString()));
}
For 문을 이용한 방식 ForEach를 이용한 방식
134ms 250ms

테스트 코드 ( LinkedList )


테스트 방식

1. 해당 테스트 방식은 1 억번 연산시 컴퓨터가 터질려고 하여 '10 만번'으로 변경하였습니다.

private void ForTime()
{
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    sw.Start();
    int a = 0;
    for (var i = 0; i < value.Count; i++)
    {
        a = value.ElementAt(i);
    }
    sw.Stop();
    Debug.Log((sw.ElapsedMilliseconds.ToString()));
}
private void ForeachTime()
{
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    sw.Start();
    int a = 0;
    foreach (int i in value)
    {
        a = i;
    }
    sw.Stop();
    Debug.Log((sw.ElapsedMilliseconds.ToString()));
}
For 문을 이용한 방식 ForEach를 이용한 방식
78358ms 1ms

반복문 성능 높이기

int len = value.Count;
for (var i = 0; i < len; i++)
{
    a = value[i];
}

위에 코드처름 Count를 따로 캐싱해서 사용할 경우 속도가 2배 정도 빠르게 됩니다.


결론

그냥 for문으로 개발하자 어차피 LinkedList를 System.Linq로 접근하는거 부터가 비효율 적이다.

 

마지막 한마디

100ms의 차이가 사소하다고 생각할지 몰라도 이것이 쌓이고 쌓이면 10초의 차이가 만들어진다.

Comments