如果我有这样的代码

for(int i=0;i<10;i++)
{
    int iTemp;
    iTemp = i;
    //.........
}

编译器是否实例化 iTemp 10 次?

或者它优化它?

我的意思是,如果我将循环重写为
int iTemp;
for(int i=0;i<10;i++)
{
    iTemp = i;
    //.........
}

会更快吗?

最佳答案

使用 reflector 可以查看 C# 编译器生成的 IL。

.method private hidebysig static void Way1() cil managed
{
    .maxstack 2
    .locals init (
        [0] int32 i)
    L_0000: ldc.i4.0
    L_0001: stloc.0
    L_0002: br.s L_0008
    L_0004: ldloc.0
    L_0005: ldc.i4.1
    L_0006: add
    L_0007: stloc.0
    L_0008: ldloc.0
    L_0009: ldc.i4.s 10
    L_000b: blt.s L_0004
    L_000d: ret
}

.method private hidebysig static void Way2() cil managed
{
    .maxstack 2
    .locals init (
        [0] int32 i)
    L_0000: ldc.i4.0
    L_0001: stloc.0
    L_0002: br.s L_0008
    L_0004: ldloc.0
    L_0005: ldc.i4.1
    L_0006: add
    L_0007: stloc.0
    L_0008: ldloc.0
    L_0009: ldc.i4.s 10
    L_000b: blt.s L_0004
    L_000d: ret
}

它们完全相同,因此在您声明 iTemp 的地方没有性能差异。

关于c# - C# 编译器如何优化代码片段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1985760/

10-11 17:14