본문 바로가기
IT, 컴퓨터

[C#] 반복문 속도 비교 for, while, foreach 성능 테스트

by 별찌파파 2023. 11. 6.
728x90
반응형
SMALL
반응형

 

프로그래밍을 하다 보면 반복문을 많이 사용하게 되는데 개발자마다 자주 사용하는 반복문이 다릅니다. 저 같은 경우에는 일반적으로 for문을 많이 사용하고 framework 같이 계속 구동해야 하는 경우에는 while 문을 많이 사용하며 foreach는 자주 사용하지 않습니다. 아무래도 foreach의 속도 때문에 자주 사용하지 않습니다. 하지만 특정 객체 내에 들어있고 모든 객체를 탐색해야 하는 경우라면 사용을 해야만 합니다. 각 반복문마다의 특징이 명확하고 사용하는 곳에 따라 퍼포먼스가 다르기 때문입니다. 오늘은 C#에서 각 반복문의 속도를 비교해 보는 시간을 가져보겠습니다.

 

C#에서 for, foreach, while 반복문의 실행 속도를 비교하는 코드를 작성하였습니다. 간단히 설명하면 속도 비교를 위해서  Stopwatch 클래스를 사용하여 각 반복문의 실행 시간을 측정하도록 하였습니다. 아래에 for, foreach, while 반복문을 사용하여 1부터 99,000,000까지의 합을 계산하고 실행 시간을 비교하는 예제 코드입니다.

 

using System;
using System.Diagnostics;
using System.Linq;
class Program
{
    static void Main()
    {
        int n = 99000000;
        long sum = 0;
        Stopwatch stopwatch = new Stopwatch();

        // for 반복문
        stopwatch.Start();
        for (int i = 1; i <= n; i++)
        {
            sum += i;
        }
        stopwatch.Stop();
        Console.WriteLine($"for 반복문 결과: {sum}");
        Console.WriteLine($"for 반복문 실행 시간: {stopwatch.ElapsedMilliseconds} 밀리초");

        sum = 0;
        stopwatch.Reset();

        // foreach 반복문
        stopwatch.Start();
        foreach (int i in Enumerable.Range(1, n))
        {
            sum += i;
        }
        stopwatch.Stop();
        Console.WriteLine($"foreach 반복문 결과: {sum}");
        Console.WriteLine($"foreach 반복문 실행 시간: {stopwatch.ElapsedMilliseconds} 밀리초");

        sum = 0;
        stopwatch.Reset();

        // while 반복문
        stopwatch.Start();
        int j = 1;
        while (j <= n)
        {
            sum += j;
            j++;
        }
        stopwatch.Stop();
        Console.WriteLine($"while 반복문 결과: {sum}");
        Console.WriteLine($"while 반복문 실행 시간: {stopwatch.ElapsedMilliseconds} 밀리초");

        Console.ReadLine();
    }
}

 

마지막 Consol.ReadLine(); 은 콘솔창을 멈춰놓기 위해서 넣은 코드이니 참고하시기 바랍니다. 이 코드를 Visual Studio로 작성하고 수행해보겠습니다.

 

계산 결과를 보면 for 문이 가장 빠르고 while문 그리고 foreach 문의 순서입니다. 제가 알고 있는 것과 비슷한데요. 제가 자주 사용하는 순서로 속도가 나왔네요. 하지만 한 번의 테스트로는 속도를 평가할 수 없기 때문에 여러 번 수행하고 그 평균으로 평가를 해보도록 하겠습니다.

반복문 \ 횟수 1회 2회 3회 4회 5회 평균
for 272 278 269 279 282 276.0
while 285 287 293 288 275 285.6
foreach 632 635 672 637 646 644.4

 

5회 정도 수행해 보았고, 평균을 내봤습니다. for문과 while은 거의 비슷하게 나왔고 심지어 while문이 더 빠른 적도 있습니다. 상황에 따라 조금씩 차이가 나겠습니다. 하지만 foreach는 확실히 2배 이상 느린 속도를 보이고 있습니다. 우선 제 PC로 위 코드를 수행해 보면 for문이 276밀리 초로 가장 빨랐고 while이 285.6밀리 초로 그다음 foreach가 644.4밀리 초로 가장 느린 것을 확인할 수 있었습니다. 단순 반복문이라면 foreach 보다는 for문이나 while 문을 사용하는 것을 추천드립니다.

728x90
반응형
LIST