• 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()

    强类型的执行效率比弱类型的执行效率低,而且低了不少。有哪位大侠知道其中缘故,还请不吝赐教,先谢过。
  • 相关阅读:
    pyqt5开发之俄罗斯方块
    Tkenter之API测试系统界面设计
    Python的标准GUI:Tkinter的组件
    Python单元测试框架——unittest
    【Android】自定义ListView的Adapter报空指针异常解决方法
    5、使用Libgdx设计一个简单的游戏------雨滴
    4.6、Libgdx线程介绍
    4.5、Libgdx运行日志管理
    4.4、Libgdx使用方法查询运行环境相关属性
    4.3、Libgdx启动类和配置
  • 原文地址:https://www.cnblogs.com/zhouyunbaosujina/p/4123725.html
Copyright © 2020-2023  润新知