2011-07-15 40 views
19

當編寫一個if語句,我總是需要像時使用And哪種性能更好?和VS AndAlso

If 1=1 And 2=2 Then 

我用過AndAlso唯一的一次是,如果第二個條件將錯誤,如果第一心不是真正的喜歡:

If Not IsDbNull(Value) AndAlso Value=2 Then 

然而,最近我聽說AndAlso是性能比And更好,因爲當第一個是真正的第二個條件是隻讀的。

在這種情況下,我就應該總是隻使用AndAlso

回答

34

是的,AndAlso可能比And更快,因爲如果先前的條件證明是錯誤的,它不會評估後續條件。

And是一種倒退到較早版本的Visual Basic。
大多數(我毫不猶豫地說全部)現代語言使用進行評估不嚴格需要短路條件布爾運算符。

例如&&用於C風格語言的運算符和運算符的全部性能爲AndAlso

如果您有大量使用AndOr的代碼,那麼全局搜索和替換可以更改現有行爲,如果第二個條件涉及具有副作用的函數調用,請務必小心。

當條件也起到我寧願使用AndAlsoOrElse除非您特別需要通過And & Or

+2

乾杯您的答覆。從現在開始,我會確保使用AndAlso&OrElse而不是舊的And&Or! – Curt

4

從C和C++背景到VB(最初是V5),VB的andor沒有短路,總是很煩人。所以第二個表達式依賴於第一個表達式的情況總是很難寫出來。

我不希望看到太多的性能提升大部分時間,除非第二個表達式有顯著的開銷,短路運營商將避免執行它,從而加速東西。

但是,如果第二個表達式是一個重要的開銷,那麼我會擔心只會有時會執行的副作用—這會使未來的維護變得更困難,並且可能會使正確性難以維護。

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.