zoukankan      html  css  js  c++  java
  • 代码规范之循环变量

    第一种写法:
            var list=new List<string>(){"str","str","str","str","str"};
        string s = default(string);        
        foreach(var item in list)
        {            
            s = item;
        }
    
    第二种写法:
            var list=new List<string>(){"str","str","str","str","str"};    
        foreach(var item in list)
        {            
            string s=item;
        }

    可能会有好多程序员以为第一种写法效率会高一些,事实真的是这样吗?

    不是,因为这两种写法最终转变成的IL代码是一样的,它们的IL代码如下

    IL_0000:  newobj      System.Collections.Generic.List<System.String>..ctor
    IL_0005:  stloc.2     
    IL_0006:  ldloc.2     
    IL_0007:  ldstr       "str"
    IL_000C:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_0011:  ldloc.2     
    IL_0012:  ldstr       "str"
    IL_0017:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_001C:  ldloc.2     
    IL_001D:  ldstr       "str"
    IL_0022:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_0027:  ldloc.2     
    IL_0028:  ldstr       "str"
    IL_002D:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_0032:  ldloc.2     
    IL_0033:  ldstr       "str"
    IL_0038:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_003D:  ldloc.2     
    IL_003E:  stloc.0     
    IL_003F:  ldloc.0     
    IL_0040:  callvirt    System.Collections.Generic.List<System.String>.GetEnumerator
    IL_0045:  stloc.3     
    IL_0046:  br.s        IL_0050
    IL_0048:  ldloca.s    03 
    IL_004A:  call        System.Collections.Generic.List<System.String>.get_Current
    IL_004F:  stloc.1     
    IL_0050:  ldloca.s    03 
    IL_0052:  call        System.Collections.Generic.List<System.String>.MoveNext
    IL_0057:  brtrue.s    IL_0048
    IL_0059:  leave.s     IL_0069
    IL_005B:  ldloca.s    03 
    IL_005D:  constrained. System.Collections.Generic.List<>.Enumerator
    IL_0063:  callvirt    System.IDisposable.Dispose
    IL_0068:  endfinally  

     欢迎加入群:254082423

    一起学习讨论asp.net mvc 

  • 相关阅读:
    网站运维之 优化
    网站运维之 风险防控
    网站运维之 使用IIS日志分析器1.03.exe进行IIS服务器日志分析
    MySQL数据库优化
    深入理解Java GC
    深入理解React虚拟DOM
    深入理解new String()
    深入理解JVM内存模型
    MySQL的四种事务隔离级别
    Node.js Stream(流)
  • 原文地址:https://www.cnblogs.com/bygrace/p/3824032.html
Copyright © 2011-2022 走看看