码迷,mamicode.com
首页 > 其他好文 > 详细

for、foreach和MoveNext循环效率粗比较

时间:2014-11-26 18:26:04      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   for   on   

 

今天没事对for循环、foreach循环、MoveNext循环,执行效率进行了对比;粗略测试代码如下:

 

static void Main(string[] args)
        {
            #region 三种方式循环执行效率测试

            List<int> intList = new List<int>();
            for (int i = 0; i < 100000000; i++)
            {
                intList.Add(i);
            }

            #region for循环执行时间测试

            Stopwatch sw_1 = new Stopwatch();
            string excuteTime_1;
            int sum1 = 0;
            sw_1.Start();
            for (int i = 0; i < intList.Count; i++)
            {
                sum1 += intList[i];
            }
            sw_1.Stop();
            excuteTime_1 = sw_1.ElapsedMilliseconds.ToString();
            #endregion

            #region foreach循环执行时间测试

            Stopwatch sw_2 = new Stopwatch();
            int sum2 = 0;
            string excuteTime_2;
            sw_2.Start();
            foreach (var item in intList)
            {
                sum2 += item;
            }
            sw_2.Stop();
            excuteTime_2 = sw_2.ElapsedMilliseconds.ToString();
            #endregion

            #region enumerator.MoveNext循环执行时间

            Stopwatch sw_3 = new Stopwatch();
            string excuteTime_3;
            int sum3 = 0;
            //using (IEnumerator<int> enumerator = intList.GetEnumerator())//1060
            //{
            using (var enumerator = intList.GetEnumerator())//630
            {
                //IEnumerator<int> enumerator = intList.GetEnumerator();//1631
                //var enumerator = intList.GetEnumerator();//976
                sw_3.Start();
                while (enumerator.MoveNext())
                {
                    sum3 += enumerator.Current;
                }
                sw_3.Stop();
                excuteTime_3 = sw_3.ElapsedMilliseconds.ToString();
            }

            #endregion


            Console.WriteLine("for循环执行时间:" + excuteTime_1);
            Console.WriteLine("foreach循环执行时间:" + excuteTime_2);
            Console.WriteLine("movenext循环执行时间:" + excuteTime_3);

            /*
             * 1)、通过以上对for循环、foreach循环和Enumerator.MoveNext()方式循环的测试,显示执行效率由高到低依次为:MoveNext>foreach>for。
             * 2)、上面的结论前提是在获取IEnumerator<T>时,用弱类型var,而不是强类型IEnumrator<int>);
             * 3)、如果变量用强类型,MoveNext的效率显著下降,比foreach低,甚至比for循环效率还低。
             */
            #endregion

            #region Queue队列测试

            QueueClass.QueueFun_1();
            #endregion

            QueueClass queueClass = new QueueClass();
            Console.ReadKey();
        }

最后又一点比较奇怪,

IEnumerator<int> enumerator = intList.GetEnumerator()
var enumerator = intList.GetEnumerator()

强类型的执行效率比弱类型的执行效率低,而且低了不少。有哪位大侠知道其中缘故,还请不吝赐教,先谢过。

 

for、foreach和MoveNext循环效率粗比较

标签:style   blog   io   ar   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/zhouyunbaosujina/p/4123725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!