zoukankan      html  css  js  c++  java
  • 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()

    强类型的执行效率比弱类型的执行效率低,而且低了不少。有哪位大侠知道其中缘故,还请不吝赐教,先谢过。
  • 相关阅读:
    SpringBoot引入spring-boot-starter-security后无法接收前端请求
    虚拟机IP地址不断改变的解决办法
    加密
    Golang设计模式学习笔记--建造者模式
    goland快捷键
    使用webhook实现博客网站自动化部署
    hugo + nginx 搭建博客记录
    Maven打包方式(多模块)
    如何抑制SettingWithCopyWarning
    时间复杂度分析--公式法
  • 原文地址:https://www.cnblogs.com/zhouyunbaosujina/p/4123725.html
Copyright © 2011-2022 走看看