【问题标题】:Which is better for performance? And vs AndAlso哪个性能更好? And vs AndAlso
【发布时间】:2011-10-06 00:20:28
【问题描述】:

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

If 1=1 And 2=2 Then

我唯一一次使用AndAlso 是,如果第一个不是真的,第二个条件是否会出错,例如:

If Not IsDbNull(Value) AndAlso Value=2 Then

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

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

【问题讨论】:

    标签: vb.net if-statement operators


    【解决方案1】:

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

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

    但是,如果第二个表达式的开销很大,那么我会担心只会在某些时候执行的副作用——这将使未来的维护更加困难,并且可能使正确性更加难以维护。

    【讨论】:

      【解决方案2】:

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

      And 是对 Visual Basic 早期版本的回归。
      大多数(我不敢说全部)现代语言都使用布尔运算符来缩短不需要严格评估的短路条件。

      例如&& C 风格语言的 and 运算符都执行为 AndAlso

      如果您有大量使用 AndOr 的代码,请小心,如果第二个条件涉及具有副作用的函数调用,则全局搜索和替换可能会改变现有行为。

      我更喜欢使用AndAlsoOrElse,除非您特别需要AndOr 提供的功能

      【讨论】:

      • 为您的回复干杯。我会确保从现在开始我使用 AndAlso & OrElse 而不是旧的 And & Or!
      【解决方案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。

      【讨论】:

        猜你喜欢
        • 2011-06-12
        • 1970-01-01
        • 2016-10-08
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 2012-06-27
        • 2017-08-09
        • 1970-01-01
        相关资源
        最近更新 更多