在 C# 中,比较以下三个 备选方案时,性能会有任何差异吗?
一个
void ONE(int x) {
if (x == 10)
{
int y = 20;
int z = 30;
// do other stuff
} else {
// do other stuff
}
}
两个
void TWO(int x) {
int y;
int z;
if (x == 10)
{
y = 20;
z = 30;
// do other stuff
} else {
// do other stuff
}
}
三个
void THREE(int x) {
int y = 20;
int z = 30;
if (x == 10)
{
// do other stuff
} else {
// do other stuff
}
}
最佳答案
所有其他条件都相同(但它们通常不相同,这就是为什么您通常必须实际测试它的原因),ONE()
和 TWO( )
应该生成相同的 IL 指令,因为局部变量最终作用于整个方法。如果 x==10
,THREE()
的速度将可忽略不计,因为其他两个不会费心将值存储在局部变量中。
这三个变量占用相同数量的内存——即使没有存储任何内容,也会为所有变量分配内存。不过,如果 JIT 编译器查找未使用的变量,它可能会在此处执行优化。
关于c# - 在子 block 内声明变量会提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3402320/