将在子块内声明变量可以提高性能吗?

CJ7*_*CJ7 5 c# scope variable-declaration

在C#中,在比较以下三种替代方案时,性能是否会有任何差异?

void ONE(int x) {

if (x == 10) 
{
    int y = 20;
    int z = 30;
    // do other stuff
} else {
    // do other stuff
}
}
Run Code Online (Sandbox Code Playgroud)

void TWO(int x) {

int y;
int z;

if (x == 10) 
{
    y = 20;
    z = 30;
    // do other stuff
} else {
    // do other stuff
}
}
Run Code Online (Sandbox Code Playgroud)

void THREE(int x) {

int y = 20;
int z = 30;

if (x == 10) 
{
    // do other stuff
} else {
    // do other stuff
}
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ade 4

其他所有条件都相同(通常不是,这就是为什么您通常必须实际测试它),ONE()并且TWO()应该生成相同的 IL 指令,因为局部变量最终作用于整个方法。如果因为其他两个不会费心将值存储在局部变量中,那么速度THREE()会慢得可以忽略不计。x==10

\n\n

所有三个都占用相同数量的内存\xe2\x80\x94,即使其中没​​有存储任何内容,所有变量的内存也会被分配。不过,如果 JIT 编译器查找未使用的变量,它可能会在此处执行优化。

\n