'返回一個數組,其中含有N個隨即元素
'並且將平均值保存在AVG中
FunctionGetRandomArray(ByValnAsLong,avgAsSingle)AsSingle()
DimiAsLong,sumAsSingle
ReDimres(1Ton)AsSingle
'以隨機數填充數組,並計算總和
RandomizeTimer
Fori=1Ton
res(i)=Rnd
sum=sum res(i)
Next
'賦值結果數組,計算平均值
GetRandomArray=res
avg=sum/n
EndFunction
難以置信的是,只需要簡單地顛倒最後2條語句的順序,就能使上面這段程序變得快些:
'...'賦值結果數組,計算平均值
avg=sum/n
GetRandomArray=res
EndFunction
例如,在一個PentiumII333MHz機器上,當N=100,000時,前段程序運行時間為0.72秒,後段程序則為0.66秒,前後相差10。
原因何在呢?前段程序中,VB將拷貝res數組到GetRandomArray對應的結果中,當數組很大時,花費的時間是很長的。後段程序中,由於GetRandomArray=res是過程的最後一條語句,VB編譯器就能確認res數組不會被再使用,因此將直接交換res和GetRandomArray的地址數值,從而節省了數組元素的物理拷貝操作以及隨後的res數組釋放操作。
總結如下:當編寫返回數組的函數時,一定要將分配臨時數組到函數名的語句放在最後,就是其後緊挨者ExitFunction或者EndFunction的位置。
->