본문 바로가기

C# 프로그래밍/코드 레벨업

[C#] 배열/리스트/스팬 비교 (Array/List/Span)

반응형

자주 사용되는 반복기 속도 비교

배열과 리스트 그리고 스팬(Span)의 반복문에서의 속도 비교를 측정하였다.

사실 측정 방법에 따라 결과가 크게 바뀌었는데(배열과 스팬이 거의 동일하게 측정되는 것이 대부분이었다.), 자주 사용되는 내림차순 정렬을 예시로 포스팅하였다.


반복문 코드

사용된 코드는 아래와 같다.

배열(Array)

private void LoopArray(int[] _array)
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();

    for (int i = 0; i < _array.Length - 1; i++)
    {
        for (int j = i + 1; j < _array.Length; j++)
        {
            if (_array[i] > _array[j])
            {
                int temp = _array[i];
                _array[i] = _array[j];
                _array[j] = temp;
            }
        }
    }

    stopwatch.Stop();
    Log("배열 " + stopwatch.ElapsedMilliseconds + " ms");
}

 

리스트(List)

private void LoopList(List<int> _list)
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();

    for (int i = 0; i < _list.Count - 1; i++)
    {
        for (int j = i + 1; j < _list.Count; j++)
        {
            if (_list[i] > _list[j])
            {
                int temp = _list[i];
                _list[i] = _list[j];
                _list[j] = temp;
            }
        }
    }

    stopwatch.Stop();
    Log("리스트 " + stopwatch.ElapsedMilliseconds + " ms");
}

 

스팬(Span)

private void LoopSpan(Span<int> _span)
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();

    for (int i = 0; i < _span.Length - 1; i++)
    {
        for (int j = i + 1; j < _span.Length; j++)
        {
            if (_span[i] > _span[j])
            {
                int temp = _span[i];
                _span[i] = _span[j];
                _span[j] = temp;
            }
        }
    }

    stopwatch.Stop();
    Log("스팬 " + stopwatch.ElapsedMilliseconds + " ms");
}

 

실행 순서

void Start()
{
    int[] array = new int[10000];
    List<int> list = new List<int>();
    list.AddRange(array);
    Span<int> span = array.AsSpan();

    LoopArray(array);
    LoopList(list);
    LoopSpan(span);
}

결과

 

유니티 로그

 

Array - Span - List 순으로 속도가 빠르게 측정되었다.

반응형