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