遲津愉 王紅軍 張樂成
[摘要]在Visual Basic程序設(shè)計(jì)中,往往需要對(duì)應(yīng)用程序進(jìn)行優(yōu)化,目的是為了提高運(yùn)行效率。當(dāng)然,對(duì)應(yīng)用程序的優(yōu)化可以采用多種方法,只是針對(duì)對(duì)象的優(yōu)化進(jìn)行探討。
[關(guān)鍵詞]Visual Basic 程序設(shè)計(jì) 對(duì)象 優(yōu)化
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0510074-01
Visual Basic是面向?qū)ο蟮某绦蛟O(shè)計(jì),而對(duì)象就是將數(shù)據(jù)和處理該數(shù)據(jù)的過程(函數(shù)和子程序)打包在一起而生成的新的數(shù)據(jù)類型。在Visual Basic中,所有窗體和控件都是對(duì)象,在Visual Basic中創(chuàng)建應(yīng)用程序之際,也就是和對(duì)象打交道之時(shí)了。因此,隨著對(duì)象的使用越來越多,對(duì)象的優(yōu)化已變得越來越重要了。
所謂“優(yōu)化”,就是通過選擇和設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)、算法以及指令序列,來提高程序效率的過程。對(duì)應(yīng)用程序的優(yōu)化
可以采用多種方法,而本文只是對(duì)對(duì)象的優(yōu)化進(jìn)行了探討。那么如何優(yōu)化呢?下列一些方法提供給大家參考。
一、程序設(shè)計(jì)時(shí)要盡量減少點(diǎn)操作
當(dāng)從Visual Basic中應(yīng)用其他應(yīng)用程序的對(duì)象時(shí),我們通常使用點(diǎn)語法“.”對(duì)對(duì)象的集合、對(duì)象、屬性和方法進(jìn)行定位。如:
Application.Workbooks.Item(1).Worksheets.Item(“Sheet1”).Cells.Item(1,1)
不難看出,鍵入的字符串不但相當(dāng)長,而且這行代碼還相當(dāng)難讀。當(dāng)從Visual Basic中調(diào)入對(duì)象時(shí),每一個(gè)“點(diǎn)”都需要Visual Basic產(chǎn)生多次調(diào)用,所以,為了寫出最有效的應(yīng)用程序,引用對(duì)象時(shí)應(yīng)盡量少用點(diǎn)操作。通過分析可用的對(duì)象和方法,常??蓽p少點(diǎn)操作的數(shù)量。例如刪除Item方法,并使用比較有效的Range方法,就可縮短上面的代碼行:
Application.Workbooks(1). Worksheets(“Sheet1”).Range(“A1”)
這樣既易讀易懂,又可提高運(yùn)行速度,減少運(yùn)行成本。
二、盡量少用跨進(jìn)程調(diào)用
在程序設(shè)計(jì)時(shí),跨進(jìn)程調(diào)用是我們常用的方法和手段,但這種方法使用多了,就會(huì)降低程序性能。在使用跨進(jìn)程ActiveX部件時(shí),就不能完全避免產(chǎn)生跨進(jìn)程調(diào)用,因此我們可用下面的方法減少跨進(jìn)程的調(diào)用。如果可能,不要在For…Next循環(huán)中引用對(duì)象,將值緩存在變量中,然后在循環(huán)體中使用變量。若必須調(diào)用對(duì)象中大量的方法,通過將代碼移入部件,可大大改進(jìn)應(yīng)用程序的性能。如,若部件是Word或Excel,可將循環(huán)宏放入模板,或?qū)⒀h(huán)過程放入Excel模塊,然后從Visual Basic中調(diào)用宏或過程,這只是一次調(diào)用,它將在部件中引發(fā)一個(gè)循環(huán)操作。
在編寫部件時(shí),通過減少跨進(jìn)程的調(diào)用可將部件中對(duì)象的設(shè)計(jì)得更有效。如,當(dāng)有幾個(gè)內(nèi)關(guān)聯(lián)的屬性時(shí),可使用帶有多個(gè)參數(shù)的方法,其中每個(gè)參數(shù)對(duì)應(yīng)一個(gè)屬性,無論方法帶有多少個(gè)參數(shù),調(diào)用方法只需一次跨進(jìn)程調(diào)用,反之,設(shè)置每個(gè)屬性則需一次單獨(dú)的跨進(jìn)程調(diào)用。同樣,如果預(yù)先知道作為客戶的部件將循環(huán)調(diào)用該部件,那么,可提供對(duì)象中完成循環(huán)的方法,然后返回適當(dāng)?shù)慕Y(jié)果,這樣可以改善程序性能。
三、要使用Set和With…End With
使用Set語句可縮短定位字符串,并提供對(duì)代碼更靈活的控制。例如使用Dim和Set語句創(chuàng)建變量,使其引用經(jīng)常使用的對(duì)象。
Dim xlRang As Object
Set xlRange=Application.ActiveSheet.Cell(1,1)
xlRange.Font.Bold=True
xlRange.Width=40
Visual Basic還提供了With…End With語句,它可用來設(shè)置代碼中隱含的對(duì)象。如:
With Application.ActiveSheet.Cell(1,1)
.Font.Bold=True
.Width=40
End With
四、使用事前連接,可大大提高運(yùn)行效率
如果對(duì)象可以事前連接,Visual Basic使用對(duì)象就更有效。若提供了對(duì)包含對(duì)象的類型庫的引用,并聲名了對(duì)象的類型,那么對(duì)象就可以事前連接。如:
Dim X As New MyObject
或者相當(dāng)于:
Dim X As MyObject
Set X=New MyObject
事前連接可使Visual Basic在編譯時(shí)完成大多數(shù)處理對(duì)象的定義工作,而不是運(yùn)行時(shí)處理。這也可使Visual Basic檢查對(duì)象所用屬性和方法的語法錯(cuò)誤,并報(bào)告錯(cuò)誤。若Visual Basic不能事前連接對(duì)象,那么就必須在事后連接。事后連接對(duì)象的代價(jià)很大,在編譯時(shí)不進(jìn)行錯(cuò)誤檢查,在運(yùn)行時(shí)每個(gè)引用需要至少由Visual Basic增加50%的工作量,所以要盡可能事前連接對(duì)象。
總之,優(yōu)化應(yīng)用程序,就是提高應(yīng)用程序的性能,降低運(yùn)行成本,而優(yōu)化對(duì)象只是優(yōu)化應(yīng)用程序的方法之一,我們希望通過對(duì)優(yōu)化對(duì)象的探討,為應(yīng)用程序的設(shè)計(jì)提供一些幫助。
參考文獻(xiàn):
[1]李姣軍、何豐、王培容,VB在CAI教學(xué)軟件開發(fā)中的技術(shù)探討VB應(yīng)用程序的優(yōu)化[J].重慶工學(xué)院學(xué)報(bào),2003年01期.
[2]John Clark Craig and Jeff Webb[美].Visual Basic6.0程序開發(fā)環(huán)境[M].北京:北京大學(xué)出版社,2000.
作者簡介:
遲津愉,女,遼寧沈陽人,實(shí)驗(yàn)師,從事計(jì)算機(jī)教學(xué)工作。