본문 바로가기

C#

박싱 언박싱 성능 체크 기록

최적화 관련 자료들을 찾다보면

박싱 언박싱 얘기가 나오는데

어느정도로 느린건지 감이 오질 않아서 

비교하고 기록을 남겨봅니다

 

더하기는 10,000,000번 (천만번)씩 반복했고

디버그 Debug.LogError() 코드는 비교용으로 1000번 반복했습니다.

 

 

결론

차이가 나기는 하지만 벌벌떨면서 사용하지 않을 필요는 없어보인다

 

전체 코드

public class TimeTester : MonoBehaviour
{

    void Start()
    {
        int repeat = 10000000;

        CheckTime(() =>
        {
            int sum = 0;
            for (int i = 0; i < repeat; i++)
            {
                sum += 1;
            }

        }, "1 더하기", 10);

        CheckTime(() =>
        {
            object num = 1;

            int sum = 0;
            for (int i = 0; i < repeat; i++)
            {
                sum += (int)num;
            }

        }, "1 언박싱 더하기", 10);

        CheckTime(() =>
        {
            object list = new List<int>() { 1 };

            int sum = 0;
            for (int i = 0; i < repeat; i++)
            {
                sum += ((List<int>)list)[0];
            }

        }, "리스트 언박싱", 10);

        CheckTime(() =>
        {
            for (int i = 0; i < 1000; i++)
            {
                Debug.LogError("1");
            }

        }, "디버그 에러", 10);

    }

    private void CheckTime(Action action, string testName, int repeat)
    {
        double sum = 0;
        for (int i = 1; i <= repeat; i++)
        {
            var watch = new System.Diagnostics.Stopwatch();
            watch.Start();

            action();

            watch.Stop();
            sum += watch.ElapsedMilliseconds;

            GC.Collect();
        }
        
        Debug.Log(testName + "평균: " + sum / repeat + "ms");
    }
}

 

 

'C#' 카테고리의 다른 글

[C#] Generic 함수 타입 변수로 지정하기  (0) 2023.10.25
[C#] 스택(Stack), 큐(Queue) 속도 차이  (0) 2022.06.23
[C#] 캐시 지역성 테스트  (0) 2022.06.23