티스토리 뷰

안녕하세요.


이번 글에서는 C#의 반복문 처리 시간에 대한 효율성을 이야기 해볼까해요. C#을 효율적으로 사용하다 보면 점점 나은 생산성이 높은 코드를 개발할 수 있습니다. 


C#을 공부하다 보면, For문보다 Foreach가 사용하기 더 쉽다는 장점을 가지고 있습니다.


Foreach 문은 Collection 기반의 변수의 값들을 순차적으로 접근할 수 있다는 이점을 가지고 있죠. 그래서 많은 분들이 Foreach를 많이 쓰고 있습니다. Foreach가 더 빠르게 처리된다고 생각하는 분들도 있구요


그럼 코드를 통해서 For 구문과 Foreach 구문 중 어떤 구문이 효율적인지 판단해볼까요.

코드는 아래와 같습니다. 

class Program

    {

        static void Main(string[] args)

        {

            // Variable 

            List<Int32> foreachDataList = new List<int>();

            List<Int32> forList = new List<Int32>();

            List<Int32> forEachList = new List<Int32>();


            long forTime = 0;

            long foreachTime = 0;



            // 시간 계산하기 

            Stopwatch sw = new Stopwatch();

            for(int n = 0; n < 10 ; n++)

            {

                Console.Write(n.ToString() + " 번째 실행 결과 \n");


                // foreach에 사용할 foreachDataList 리스트 

                for (int i = 0; i < 10000; i++)

                {

                    foreachDataList.Add(i);

                }


                

                sw.Start();


                for (int i = 0; i < foreachDataList.Count; i++)

                {

                    forList.Add(i);

                }


                sw.Stop();


                // For Loop 결과 확인하기 

                Console.Write("For Loop :- " + sw.ElapsedTicks + "\n");

                forTime += sw.ElapsedTicks;


                sw.Reset();

                sw.Restart();


                foreach (int a in foreachDataList)

                {

                    forEachList.Add(a);

                }


                sw.Stop();



                // ForEach 계산 시간 확인하기 

                Console.Write("Foreach Loop:- " + sw.ElapsedTicks + "\n");

                foreachTime += sw.ElapsedTicks;


                Console.Write("--------------------------\n");

                sw.Reset();

            }


            

            Console.Write("Total For Loop :- " + forTime + "\n");

            Console.Write("Total Foreach Loop :- " + foreachTime + "\n");


            Console.ReadLine();

        }

    }


위의 코드에 대한 간략한 리뷰를 하자면 For 구문과 Foreach 구문을 이용하여 10000번 반복하여 값을 더합니다. 이때 각각의 구문이 처리한 시간을 계산하지요. 


그리고 이러한 처리를 10번 반복하여 마지막에 Total For Loop와 Total Foreach Loop 값을 통해서 각 구문의 처리 시간을 보여줍니다.


위의 코드를 실행하게 되면 아래와 같은 결과를 가지게 됩니다.

예상외로 For 구문이 더 빠르다는 걸 보여주죠. For문이 Foreach문보다 빠르네요. 



For 구문은 Foreach에 비해 30% 정도 빠르게 처리가 됩니다. 하지만 위의 코드는 문제가 하나 있죠.

For 구문은 i의 값을 바로 더하고, Foreach 구문에서는 foreachDataList에 접근하여 값을 Foreach에 추가하고 있습니다.


여기에서 시간이 더 걸리는거 아닐까 라는 의문을 가질 수 있습니다.


위의 코드의 For 구문을 조금 변경해 보죠. 


for (int i = 0; i < foreachDataList.Count; i++)

{

 forList.Add(i);

}


를 아래와 같이 수정합니다.


for (int i = 0; i < foreachDataList.Count; i++)

{

     forList.Add(foreachDataList[i]);

}


이렇게 수정하면 For 구문도 Foreach 구문도 모두 foreachDataList에 값을 가지고 와서 각 List에 값을 추가하게 됩니다.

이렇게 수정하고 난뒤에도 여전히 For문이 Foreach문보다 빠르다는 걸 확인해 볼까요.


실행해봅니다.

For 구문의 처리시간이 조금 늘긴 했지만, 여전히 For문이 Foreach문보다 빠르다는 걸 확인할 수 있습니다.

리스트에 접근하여 값을 가지고 오더라도 말이죠. 



이 글에서는 For문이 Foreach문보다 빠르다는 것을 확인해보았습니다.

For와 Foreach를 동시에 사용할 수 있는 경우에 For 구문을 사용하는것이 

C# 개발을 효율적으로 하는 방법이라는 것 설명드렸습니다.


그럼 이만 줄이겠습니다.


이 글이 도움이 되셨으면, 아래의 하트를 눌러주세요.


댓글