首页 > 代码库 > for、foreach和MoveNext循环效率粗比较

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

 

今天没事对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循环效率粗比较