top
Loading...
優化之路:精簡VB程序的代碼

在多數代碼優化技術中都包括了從代碼中刪除不必要的元素,而下面元素的長度和數量是無須限制便可刪除的:

1.標志符名稱

2.注釋

3.空行

其他元素,如變量、窗體和過程,確實要占用內存的一部分空間,最好將它們精簡以使效率更高。當應用程序作為一個.exe文件運行時,有幾項技術可用于縮小應用程序所需內存。以下技術可縮小代碼大小:

1.減小加載窗體數目

2.減小控件數目

3.用標簽代替文本框

4.保持數據在磁盤文件和資源中,并且只在最需要時才加載

5.組織模塊

6.考慮替換Variant數據類型

7.使用動態數組,并在刪除時回收內存空間

8.消除死代碼和無用的變量

9.回收被字符串和對象變量用過的空間

一、每一個加載的窗體,無論是與否,都要占用一定數量的內存(其數量隨著窗體上控件的類型和數量,以及窗體上位圖的大小等不同而有所改變)。所以,為了節約內存,我們只在需要時才加載窗體,不需要時卸載窗體(而不是隱藏窗體)。記住:任何對窗體的引用,和對用New聲明的窗體變量的引用,都會導致VB加載該窗體。

當使用Unload方法卸載窗體時,只能卸載釋放掉部分窗體所占的空間。若想釋放所有空間,可用關鍵字Nothing使窗體的引用無效,如:

Set From=Nothing

二、設計應用程序時,窗體應盡量少用控件。實際的限制取決于控件的類型和系統。實際上,含有大量控件的窗體將運行緩慢。一項與之相關的技術就是:在設計時,盡可能使用控件數組,而不是在窗體上放置大量同類型的控件。

三、標簽控件占用的Windows資源比文本框少,因此,在可能的情況下,應使用標簽代替文本框。

例如,當窗體上需要一個隱藏的控件保存文本時,使用標簽應該更為有效。如果是需要大量文本域的數據輸入窗體,也可以用這種技術優化。這時,我們可以針對每一個域創建一個標簽,并使用單文本框輸入,在LostFocus事件中移動它到下一個標簽的位置:

Prirate Sub Label1_LostFocus 
Update Label1
Label1.Option=Text1.text
Text1.Move Label2.LeftLabel2.Top
Text1.Text1 contents
Text1.Text=Label2.Caption
End Sub

通過適當設置BackColor和BorderStyle的屬性,可以使標簽看起來像文本框,雖說這會需要更多的代碼,但對于含有大量文本域的窗體,它可以大大地減少資源的使用。

四、在設計中,直接放入應用程序的數據(像屬性或代碼中的文字字符串和數值)將增加運行時程序占用的內存。運行時從磁盤文件和資源中加載數據可以減少內存占用。這對大的位圖和字符串特別有價值。

五、VB只在需要時才加載模塊,即當代碼調用模塊中的一個過程時,模塊才被加載到內存中。若從未調用一特定模塊中的過程,VB決不會加載該模塊。因此,盡量把相關的過程放在同一個模塊中,讓VB只在需要時才加載模塊。

六、Variant數據使用極其靈活,但占用內存大。所以,我們應考慮用其他數據類型代替Variant變量,特別是替代Variant變量數組。

每一個Variant占用16個字節,而Integer占用2個字節,Double占用8個字節,長字符串變量占用4個字節,加上字符串中每一個字符占用1個字節,共5個字節。但Variant字符串變量會占用16個字節,再加上字符串中每一個字符占用一個字節。因為它們太大,消耗堆棧空間特別快,所以特煩人,尤其是在作局部變量或過程的參數時。但有些情況下,Variant變量的靈活性又能給程序帶來極大的方便,所以,用不用這項優化技術應根據應用程序的情況來作取舍。

七、這項技術相信大家并不陌生。動態數組可用Erase或ReDim Preserve收回數組所占用的內存。例如:Erase MyArray,Erase用于完全刪除數組;ReDim Preserve則只縮短數組而不丟失其內容:

ReDim Preserve MyArray10smallernum

刪除固定數組不能收回它占用的內存空間,只可簡單地清除數組內每一個元素。如果元素是字符串,或包含字符串或數組的Variant變量,那刪除數組可回收這些字符串或Variant變量所占用的內存,而不是數組本身所占用的內存。

八、當過程結束時,可自動回收(非靜態)局部字符串和數組變量所占用的內存空間。但是,全局、模塊級的字符串和數組變量一直存活到整個程序結束。要使應用程序盡量小,應盡可能地回收這些變量所占用的空間。

九、再開發和修改程序時,可能遺留了一些死代碼——代碼中的一個完整過程,而它并沒有被任何地方調用,也可能聲明了一些不用的變量。雖然再創建.exe文件時,VB確實可刪除無用的常數,但不能刪除無用的變量和死代碼。

要消除死代碼,可在”編輯“菜單中,使用”查找“命令搜索特定變量的引用;或者,當每個模塊都含有Option Explicit語句時,通過刪除或注釋該變量的聲明,并運行應用程序,可迅速發現變量是否被調用,若被調用,則VB會出錯,否則就沒被使用。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗