• 一个疑问


    摘自: more effective c#

    9. 对数组跟集合使用foreach

    循环数组或集合有三种方式:

    int[] foo = new int[100];

    第一种:

    1.  
      foreach(int i in foo)
    2.  
      {
    3.  
      // do somethings.
    4.  
      }

    第二种:

    1.  
      for (int index = 0; index < foo.Length; index++)
    2.  
      {
    3.  
      // do somethings.
    4.  
      }

    第三种:

    1.  
      int len = foo.Length;
    2.  
      for (int index = 0; index < len; index++)
    3.  
      {
    4.  
      // do somethings.
    5.  
      }

    对于C或C++,第三种循环效率最佳。但是在C#中是最差的,因为在访问每一个实际的集合时,运行时确保对每个集合的边界做检测。而将集合的大小赋值给一个变量,这使得每次进行for循环第二个条件参数总需要对边界进行两次检测。并使得JIT编译器在生成代码的时候做了更多的事情。??????????????????

    原始的C#编译器对第二种循环效率是最佳的,反而foreach循环效率差,主要是因为涉及到装箱操作。而数组类型是安全的情况下,foreach可以为数组生成不一样的IL代码,使得效率跟第二种循环一样。并且使用foreach可以写更少的代码。

  • 相关阅读:
    Leetcode86.分隔链表
    Leetcode39.组合总和
    Leetcode31.下一个排列
    剑指Offer35.复杂链表复制
    剑指Offer14-I.剪绳子
    剑指Offer38.字符串的排序
    Leetcode29.两数相除
    232. Implement Queue using Stacks
    程序员跳槽指南
    226. Invert Binary Tree
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/9661005.html
Copyright © 2020-2023  润新知