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)
其他所有条件都相同(通常不是,这就是为什么您通常必须实际测试它),ONE()并且TWO()应该生成相同的 IL 指令,因为局部变量最终作用于整个方法。如果因为其他两个不会费心将值存储在局部变量中,那么速度THREE()会慢得可以忽略不计。x==10
所有三个都占用相同数量的内存\xe2\x80\x94,即使其中没有存储任何内容,所有变量的内存也会被分配。不过,如果 JIT 编译器查找未使用的变量,它可能会在此处执行优化。
\n