你可能會非常驚奇:Friend類型過程的執行速度要明顯快於Public類型。這可以通過創建一個帶有Private類和Public類(設定Instancing=MultiUse)的ActiveXEXE工程看到,在2個類模塊中添加下面的代碼:
PublicSubPublicSub(ByValvalueAsLong)
'
EndSub
PublicFunctionPublicFunction(ByValvalueAsLong)AsLong
'
EndFunction
FriendSubFriendSub(ByValvalueAsLong)
'
EndSub
FriendFunctionFriendFunction(ByValvalueAsLong)AsLong
'
EndFunction
然後,在表單模塊中創建一個循環,執行每個例程許多次。比如,要在一個PentiumII機器上查看執行時間上的區別,可以調用每個例程1,000,000次。下面是測試的結果:
Private類模塊中,反復調用1,000,000次PublicSub或者Function耗費了0.46秒,而調用內容相同的Friend類型模塊則分別只有0.05秒和0.06秒。前後竟然相差了8-9倍之多!對於MultiUse類型的Public類模塊,也是一樣的結果。
對於這個不可思議的結果的可能解釋是:Friend型過程沒有處理匯集和拆裝代碼的消耗(Public過程可以從當前工程外被調用,因此COM必須要來回地匯集數據)。
但是在多數情況下,這些時間差別是不明顯的,特別是程序中包含一些復雜和耗時的語句時。
即使這樣,Friend型過程仍有其他的優勢高於Public類型,比如:接受和返回在BAS模塊中定義的UDT變量的能力。
->