如果在第一个“返回”之后有一个“else”,这对性能明智吗?
本文关键字:性能 else 第一个 返回 之后 如果 有一个 | 更新日期: 2023-09-27 17:50:03
我已经看到了创建布尔返回方法的两种不同方法:
bool Case1()
{
if (A)
return true;
else
return false;
}
bool Case2()
{
if (A)
return true;
return false;
}
哪一个更快?不写else
只是为了节省一行,让它更清晰,或者有一个可以忽略不计的性能增益,这有意义吗?
No.
甚至当我们看它们的IL
代码时,它们具有相同的IL
代码,因此它们之间没有性能差异。用你更容易读的
.method private hidebysig instance bool Case1() cil managed
{
// Code size 9 (0x9)
.maxstack 1
.locals init ([0] bool CS$1$0000,
[1] bool CS$4$0001)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.1
IL_0003: ldc.i4.1
IL_0004: stloc.0
IL_0005: br.s IL_0007
IL_0007: ldloc.0
IL_0008: ret
} // end of method Program::Case1
看看这些代码的性能;
http://ideone.com/8Sc7Ho ->内存:33856 kB
http://ideone.com/MrnaAl ->内存:33808 kB
所以即使你用了一万次,也没什么好担心的。
c#编译器应该为这两种情况生成相同的IL,因此在性能上应该没有区别。如果你想知道实际发生了什么,你可以随时查看生成的IL(试图教如何钓鱼)。
IMHO, Case1
更容易阅读,这是有价值的。我的第二个选择是return A;
(正如其他一些答案中提到的)。如果A
不是bool
,则存在隐式转换,在某些情况下可能会令人困惑。
我认为可读性应该胜出,除非你可以用分析器证明有问题。
不会有(可以忽略不计的)差异。从编码的角度来看,你应该这样做:
return A;
但假设代码只是一个例子,那么我建议:
bool Case3()
{
bool retValue;
if (A)
{
retValue = true;
}
else
{
retValue = false;
}
return retValue;
}
这样您就非常清楚发生了什么,以及要返回的值是什么。如果您需要返回并更改该方法所做的功能,则要容易得多。
性能方面它们是相同的。从良好的编码实践的角度来看,更倾向于后者——这样函数总是返回一个有效值就很清楚了。
它们是一样的
如果A
为假,在两种情况下都将跳转到return false
语句