[Tuning Tips] C# For vs Foreach vs Lambda Expression vs while

Discussion in 'Tuning Tips' started by ocrenaka, Mar 1, 2013.

  1. Offline

    ocrenaka

    • Trùm Cuối

    Message Count:
    1,594
    Likes Received:
    464
    Trophy Points:
    83
    Vòng lặp là cái thông dụng, thường được sử dụng nhất. Có nhiều cách để duyệt list, nhưng mà cách nào là tối ưu nhất, ít tôn thời gian và bộ nhất nhớ, mình có đoạn code so sánh giữa for, foreach, lambda expression và while cho mọi người.

    for nhanh hơn foreach nhanh hơn Lambda Expression nhanh hơn while

    Còn đây là Code để mọi người so sánh.
    Code:
            public class TestProgram
            {
                public int ID;
            }
     
            public static void Main()
            {
                List<TestProgram> lstTestProgram = new List<TestProgram>();
                for (int i = 0; i < 100; i++)
                {
                    lstTestProgram.Add(new TestProgram { ID = i });
                }
     
                //Do thoi gian cua for
                Stopwatch forWatch = new Stopwatch();
                forWatch.Start();
                for (int n = 0; n < 200000; n++)
                {
                    for (int i = 0; i < lstTestProgram.Count; i++)
                    {
                        if (lstTestProgram[i].ID == 1)
                        {
                            TestProgram obj = lstTestProgram[i];
                            break;
                        }
                    }
                }
                forWatch.Stop();
                Console.WriteLine("for " + forWatch.ElapsedMilliseconds);
     
                //Do thoi gian cua foreach
                Stopwatch foreachWatch = new Stopwatch();
                foreachWatch.Start();
                for (int n = 0; n < 200000; n++)
                {
                    foreach(TestProgram obj in lstTestProgram)
                    {
                        if (obj.ID == 1)
                        {                   
                            break;
                        }
                    }
                }
                foreachWatch.Stop();
                Console.WriteLine("foreach " + foreachWatch.ElapsedMilliseconds);
     
                //Do thoi gian cua lambda expression
                Stopwatch lambdaWatch = new Stopwatch();
                lambdaWatch.Start();
                for (int n = 0; n < 200000; n++)
                {
                    TestProgram obj =  lstTestProgram.Where(a => a.ID == 0).FirstOrDefault();
                }
                lambdaWatch.Stop();
                Console.WriteLine("lambda " + lambdaWatch.ElapsedMilliseconds);
     
                //Do thoi gian cua while
                Stopwatch whileWatch = new Stopwatch();
                whileWatch.Start();
                for (int n = 0; n < 200000; n++)
                {
                    int i = 0;
                    while (i < lstTestProgram.Count)
                    {
                        if(lstTestProgram[i].ID ==1)
                        {
                            TestProgram obj = lstTestProgram[i];
                        }
                        i++;
                    }
                }
                lambdaWatch.Stop();
                Console.WriteLine("while " + whileWatch.ElapsedMilliseconds);
            }
    
    FNguyen likes this.

Share This Page