C# foreach,linq,delegate集合查询的性能比较

因为前面,叶鹏(http://www.cnblogs.com/jqbird/archive/2011/11/04/2235627.html 已经做过测试,我只是重新验证了一下,发现他的结果是不对的。我得出的结果是,foreach > delegate > linq,这个是我反复测试的结果

代码和他的差不多

        public class TestClass
        {
            public int Id
            {
                get;
                set;
            }
            public string Name
            {
                get;
                set;
            }
        }

        static void Main(string[] args)
        {
            test();
        }

 

        private static void test()
        {
            IList<TestClass> list1 = new List<TestClass>();

            for (int i = 0; i < 10000000; i++)
            {
                TestClass tc = new TestClass();
                tc.Id = i;
                tc.Name = "Test Data" + i;
                list1.Add(tc);
            }

            Stopwatch timer = new Stopwatch();

            #region for circle
            timer.Start();
            int count = 0;
            foreach (TestClass tc in list1)
            {
                if (1 <= tc.Id && tc.Id < 1000)
                {
                    count++;
                }
            }
            timer.Stop();

            Console.Write("Count:" + count + ", for circle time:");
            Console.WriteLine(timer.Elapsed.Ticks);
            #endregion

            #region linq
            timer = new Stopwatch();
            timer.Start();
            int count2 = 0;
            count2 = list1.Where(p => p.Id >= 1 && p.Id < 1000).Count();
            timer.Stop();

            Console.Write("Count:" + count2 + ", linq time:");
            Console.WriteLine(timer.Elapsed.Ticks);
            #endregion

            #region delegate
            timer = new Stopwatch();
            timer.Start();
            int count3 = list1.ToList().FindAll(delegate(TestClass post)
            {
                return post.Id >= 1 && post.Id < 1000;
            }).Count;

            timer.Stop();
            Console.Write("Count:" + count3 + ", delegate time:");
            Console.WriteLine(timer.Elapsed.Ticks);
            #endregion

            Console.Read();
        }

而我得出的结论:

 

希望广大朋友指正,水平有限!!

 

posted @ 2011-11-04 11:11  草帽Luffy  阅读(547)  评论(2编辑  收藏  举报