[C#] for, foreach 성능 비교

natae·2022년 8월 27일
0

Csharp

목록 보기
4/9

개요

  • 예전에 for가 foreach 보다 성능이 좋다는 글을 종종 본 적 있음
  • .NET6에서 확인

코드

Program.cs

using Study;

Loop.StartFor(1000000); // 100만

----------------------------------

using Study;

Loop.StartForeach(1000000); // 100만

Loop.cs

namespace Study
{
    class Loop
    {
        public static void StartFor(int count)
        {
        	// 변수, 리스트 초기화
            var recorder = new Recorder();
            var temp = 0;

            var list = new List<int>();
            for (var i = 0; i < count; i++)
            {
                list.Add(i);
            }

			// 측정
            recorder.Start();
            for (var i = 0; i < count; i++)
            {
                temp += list[i];
            }
            recorder.Stop();
        }

        public static void StartForeach(int count)
        {
        	// 변수, 리스트 초기화
            var recorder = new Recorder();
            var temp = 0;

            var list = new List<int>();
            for (var i = 0; i < count; i++)
            {
                list.Add(i);
            }

			// 측정
            recorder.Start();
            foreach (var val in list)
            {
                temp += val;
            }
            recorder.Stop();
        }
    }
}

Recorder.cs

namespace Study
{
    class Recorder
    {
        Stopwatch _timer = new Stopwatch();
        long _bytesPhysicalBefore = 0;        

        public void Start()
        {            
            _timer.Reset();

            var process = Process.GetCurrentProcess();
            _bytesPhysicalBefore = process.WorkingSet64;            

            _timer.Start();
        }

        public void Stop()
        {
            _timer.Stop();

            var process = Process.GetCurrentProcess();
            var bytesPhysicalAfter = process.WorkingSet64;

			// 측정 전후, 프로세스의 메모리 할당량 차이 출력
            Console.WriteLine($"{bytesPhysicalAfter - _bytesPhysicalBefore} physical bytes used.");
            // 측정 전후, 지나간 틱 출력
            Console.WriteLine($"{_timer.ElapsedTicks} total ticks ellapsed.");

            Console.WriteLine("--------------------------------------");
        }
    }
}

출력

// For 5회
49152 physical bytes used.
45298 total ticks ellapsed.
--------------------------------------
77824 physical bytes used.
44192 total ticks ellapsed.
--------------------------------------
49152 physical bytes used.
44367 total ticks ellapsed.
--------------------------------------
77824 physical bytes used.
45675 total ticks ellapsed.
--------------------------------------
77824 physical bytes used.
44521 total ticks ellapsed.
--------------------------------------

// Foreach 5회
45056 physical bytes used.
49288 total ticks ellapsed.
--------------------------------------
45056 physical bytes used.
47550 total ticks ellapsed.
--------------------------------------
40960 physical bytes used.
46511 total ticks ellapsed.
--------------------------------------
45056 physical bytes used.
42879 total ticks ellapsed.
--------------------------------------
73728 physical bytes used.
42931 total ticks ellapsed.
--------------------------------------

결론

  • 메모리 사용량 및 시간 성능은 차이가 없는 것으로 보임

참고 문헌

  • ttps://helloezzi.tistory.com/131
profile
서버 프로그래머

0개의 댓글