top
Loading...
VB“超頻”秘籍之隱藏的Variant變量
火眼識破隱藏的Variant變量

如果沒有用As語句聲明變量,默認類型就是Variants,比如:

Dim name ’ this is a variant

或者,當前模塊下沒有聲明Option Explicit語句時,任何變量都是Variants類型。

許多開發者,特別是那些先前是C程序員的人,都會深信下面的語句將聲明2個Interger類型變量:

Dim x, y As Integer

而實際上,x被聲明為了variant類型。由于variant類型變量要比Integer類型慢很多,所以要特別注意這種情況。正確的一行聲明方法是:

Dim x As Integer, y As Integer

GoSub在編譯程序中速度變慢

編譯為本地代碼的VB應用程序中,如果使用 GoSubs 命令,就會比通常的 Subs 或者 Function 調用慢5-6倍;相反,如果是p-code模式,就會相當快。 減少DoEvents語句的數量

不要在代碼中放置不必要的DoEvents語句,尤其是在時間要求高的循環中。遵循這個原則,至少能在循環中的每N次反復時才執行DoEvents語句,從而增強效率。比如使用下面的語句:

If (loopNdx Mod 10) = 0 Then DoEvents

如果只是使用DoEvents來屏蔽鼠標以及鍵盤操作,那么就可以在事件隊列中存在待處理項目時調用它。通過API函數GetInputState來檢查這個條件的發生:

Declare Function GetInputState Lib "user32" Alias "GetInputState" () As Long

’ ...

If GetInputState() Then DoEvents

為常量定義合適的類型

VB在內部使用最簡單、最可能的數據類型保存符號數值,這意味著最通常的數字類型-比如0或者1-都按照Integer類型存儲。如果在浮點表達式中使用這些常量,可以通過常量的合適類型來加速程序運行,就象下面的代碼:

value# = value# + 1#.

這個語句強迫編譯器按照Double格式存儲常量,這樣就省卻了運行時的隱含轉換工作。還有另外的一種處理方法就是:在常量聲明時就進行相應類型的定義,代碼如下:

Const ONE As Double = 1

And、Or和Xor:讓我們來優化表達式

要檢測一個整數值的最高有效位是否有數值,通常要使用如下的代碼(有二種情況:第一組If判斷表明對Integer類型,第二組對Long類型):

If intValue And &H8000 Then

’ most significant bit is set

End If

If lngValue And &H80000000 Then

’ most significant bit is set

End If

但由于所有的VB變量都是有符號的,因此,最高有效位也是符號位,不管處理什么類型的數值,通過下面的代碼就可以實現檢測目的:

If anyValue < 0 Then

’ most significant bit is set

End If

另外,要檢測2個或者更多個數值的符號,只需要通過一個Bit位與符號位的簡單表達式就可以完成。下面是應用這個技術的幾段具體代碼:

1、判斷X和Y是否為同符號數值:

If (x < 0 And y < 0) Or (x >= 0 And y >=0) Then ...

’ the optimized approach

If (x Xor y) >= 0 Then

2、判斷X、Y和Z是否都為正數

If x >= 0 And y >= 0 And z >= 0 Then ...

’ the optimized approach

If (x Or y Or z) >= 0 Then ...

3、判斷X、Y和Z是否都為負數

If x < 0 And y < 0 And z < 0 Then ...

’ the optimized approach

If (x And y And z) < 0 Then ...

4、判斷X、Y和Z是否都為0

If x = 0 And y = 0 And z = 0 Then ...

’ the optimized approach

If (x Or y Or z) = 0 Then ...

5、判斷X、Y和Z是否都不為0

If x = 0 And y = 0 And z = 0 Then ...

’ the optimized approach

If (x Or y Or z) = 0 Then ...

要使用這些來簡單化一個復雜的表達式,必須要完全理解boolean型的操作原理。比如,你可能會認為下面的2行代碼在功能上是一致的:

If x <> 0 And y <> 0 Then

If (x And y) Then ...

然而我們可以輕易地證明他們是不同的,比如X=3(二進制=0011),Y=4(二進制=0100)。不過沒有關系,遇到這種情況時,我們可以對上面的代碼進行局部優化,就能實現目的。代碼如下:

If (x <> 0) And y Then ...
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗