循环中定义变量并赋值
和先定义好变量,循环中只赋值
那个效率高

解决方案 »

  1.   

    由于不管是那种方式 比如循环N次 都肯定有N次定义与N次赋值 所以初看两者效率一致
    但是CPU执行时 肯定是后者效率高 因为期间只负责复制 一个MOV就搞定 如果先定义再复制就相当于前面
    做了!@¥#!@¥!@¥@!¥很多条指令后面加一条MOV
    循环的奥义告诉我们 想要速度快 尽量让一个循环只做一件单一的事情
    这个是鄙人的分析
      

  2.   

    [1]前者在VB.net中通不过,C#中可以,语言规范有差别。[2]在C#中,如果没有闭包的情况下,编译器会生成相同结果。
    定义在外
                int j;
                for (int i = 0; i < 100; i++)
    0000002b  xor         esi,esi 
    0000002d  nop              
    0000002e  jmp         00000038 
                {
    00000030  nop              
                    j = 100;
    00000031  mov         ebx,64h 
                }
    00000036  nop              
                for (int i = 0; i < 100; i++)
    00000037  inc         esi  
    00000038  cmp         esi,64h 
    0000003b  setl        al   
    0000003e  movzx       eax,al 
    00000041  mov         edi,eax 
    00000043  test        edi,edi 
    00000045  jne         00000030 
            }
    定义在内
                for (int i = 0; i < 100; i++)
    0000002b  xor         esi,esi 
    0000002d  nop              
    0000002e  jmp         00000038 
                {
    00000030  nop              
                    int j;
                    j = 100;
    00000031  mov         ebx,64h 
                }
    00000036  nop              
                for (int i = 0; i < 100; i++)
    00000037  inc         esi  
    00000038  cmp         esi,64h 
    0000003b  setl        al   
    0000003e  movzx       eax,al 
    00000041  mov         edi,eax 
    00000043  test        edi,edi 
    00000045  jne         00000030 
            }[3]在C#中,在有闭包的情况下,结果大相径庭
    http://topic.csdn.net/u/20090821/13/7c30e8cb-3d37-4d4f-9c11-0df1dd7be8f4.html
    见:奇怪的局部变量,分别对应其中“闭包一”和“闭包二”中int copy的情况。