哪个性能更好?和安德尔一样

时间:2011-07-15 09:30:03

标签: vb.net if-statement operators

在编写If语句时,我总是在需要时使用And,如:

If 1=1 And 2=2 Then

我唯一一次使用AndAlso的情况是,如果第一个不正确,第二个条件会出错:

If Not IsDbNull(Value) AndAlso Value=2 Then

但是,最近我听说AndAlso的性能优于And,因为第二个条件只有在第一个条件为真时才会被读取。

在这种情况下,我应该只使用AndAlso吗?

3 个答案:

答案 0 :(得分:36)

是的,AndAlso可能比And更快,因为如果之前的条件证明是错误的,它不会评估后续条件。

And是早期版本的Visual Basic的回归 大多数(我毫不犹豫地说所有)现代语言都使用布尔运算符来表示不需要严格评估的短路条件。

e.g。 && C风格语言的运算符均为AndAlso

如果您有大量使用AndOr的代码,请注意,如果第二个条件涉及具有副作用的函数调用,则全局搜索和替换可以更改现有行为。< / p>

我希望使用AndAlsoOrElse,除非您明确要求And&amp;提供的功能。 Or

答案 1 :(得分:4)

从C和C ++背景进入VB(最初是V5),VB的andor没有短路,这总是令人讨厌。因此,第二个表达式依赖于第一个表达式的情况总是更难写。

我不希望在大多数情况下看到很多性能提升,除非第二个表达式有很大的开销,短路运算符将避免执行它,从而加快速度。

但是,如果第二个表达是一个重要的开销,那么我会关注有时只会执行的副作用 - 这将使未来的维护更加困难,并且可能使正确性难以维持。

答案 2 :(得分:3)

当条件也起作用时:

If functionA() And functionB() Then

...

public shared functionA() As Boolean
  IF A is false THEN log -> return true or false

...

public shared functionB() As Boolean
  IF B is false THEN log -> return true or false

在这里使用AndAlso可能是错误的方法,因为当A和B都为假时它只会记录B.