程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 未公開的返回數組型函數加速秘訣

未公開的返回數組型函數加速秘訣

編輯:VB綜合教程
在VB6中,函數是能夠返回數組對象的。這種情況下,我們不能象返回對象或者數值的其他函數一樣使用函數名當做局部變量來存儲中間結果,因此不得不生成一個臨時局部數組,函數退出前再分配這個數組給函數名,就象下面的代碼一樣:

'返回一個數組,其中含有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的位置。

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved