vb高效程式設計(優化)
本文適合任何水準的vb程式設計人員。
一、減少載入表單數目
每一個載入的表單,無論可視與否,都要佔據一定數量的記憶體(其數量隨表單上控制項的類型和數量,以及表單上點陣圖的大小等的不同而變化)。只在需要顯示時才加 載表單,不再需要時,卸載表單(而不是隱藏表單)。記住,任何對表單的屬性、方法或控制項的引用,或對用 New 聲明的表單變數的引用,都會導致 Visual Basic 載入該表單。
當使用 Unload 方法卸載表單時,只能釋放部分表單所占空間。要釋放所有空間,可用關鍵字 Nothing 使表單的引用無效:
Set Form = Nothing
二、減少控制項數目
當設計應用程式時,表單應儘量少用控制項。實際的限制取決於控制項的類型和系統,但實際上,含有大量控制項的表單將運行緩慢。一項與之相關的技術是:設計時,盡可能地使用控制項陣列,而不是在表單上放置大量同類型的控制項。
三、用標籤代替文字方塊
標籤控制項佔用的 Windows 資源比文字方塊少,因此,在可能的情況下,應使用標籤代替文字方塊。例如,當表單上需要一個隱藏的控制項保存文本時,使用標籤更有效。
四、保持資料在磁片檔或資源中,並且只在需要時才載入
在設計時,直接放入應用程式的資料(象屬性或代碼中的文字字串和數值)將增加運行時應用程式佔用的記憶體。運行時從磁片檔或資源中載入資料可減少佔用記憶體。這對大點陣圖和字串特別有價值。
詳細資訊 關於向應用程式添加資源的詳細資訊,請參閱「利用資源檔進行工作」。
五、組織模組
Visual Basic 只在需要時才載入模組—即當代碼調用模組中的一個過程時,模組才被載入到記憶體。如果從未調用一特定模組中的過程,Visual Basic 決不載入該模組。因此,儘量把相關的過程放在同一模組中,讓 Visual Basic 只在需要時才載入模組。
六、考慮替換 Variant 資料類型
Variant 資料類型使用極其靈活,但是比其它資料類型所占記憶體大。當要壓縮應用程式多餘的空間時,應考慮用其它資料類型替代 Variant 變數,特別是替代 Variant 變數陣列。
每一個 Variant 佔用 16 個位元組,而 Integer 占 2 個位元組,Double 占 8 個位元組。變長字串變數佔用 4 個位元組加上字串中每一個字元佔用 1 個位元組,但是,每一個包含字串的 Variant 都要佔用 16 個位元組加上字串中每一個字元佔用 1 個位元組。因為它們太大,因此在用作區域變數或過程的參數時,Variant 變數是特別煩人的,這是因為它們消耗堆疊空間太快。
但在有些情況下,使用其它資料類型替代 Variant,靈活性降低了,為彌補損失的靈活性,不得不增加更多的代碼。結果是大小沒有真正的減小。
七、使用動態陣列,並在刪除時回收記憶體
使用動態陣列代替固定陣列。當不再需要動態陣列的資料時,用 Erase 或 ReDim Preserve 放棄不需要的資料,並回收陣列所用記憶體。例如,用以下代碼可回收動態陣列所用空間:
Erase MyArray
這裡,Erase 完全刪除陣列,ReDim Preserve 則只縮短陣列而不丟失其內容:
ReDim Preserve MyArray(10, smallernum)
刪除了固定大小陣列,也不能回收該陣列所占空間—只是簡單地清除陣列每一元素中的值。如果元素是字串,或包含字串或陣列的 Variant 變數,那麼刪除陣列可回收這些字串或 Variants 所占記憶體,而不是陣列本身所占記憶體。
八、回收被字串或物件變數用過的空間
當過程結束時,可自動回收(非靜態)局部字串和陣列變數所用空間。但是,全域和模組層級的字串和陣列變數一直存活到整個程式結束。要想應用程式儘量小,就得盡可能回收這些變數所用空間。將零長度字串賦給字串變數,可回收其空間:
SomeStringVar = "" '回收空間。
同樣地,將物件變數設置成 Nothing 可回收該物件所用的部分(而不是全部)空間。例如,刪除一個 Form 物件變數:
Global F As New StatusForm
F.Show 1 'Form 載入並以模態顯示。
X = F.Text1.Text '使用者按下按鈕
'隱藏表單。
Unload F '刪除表單可視部分。
Set F = Nothing '回收空間(模組資料)。
即使沒有使用顯式表單變數,也應注意將不再用的表單卸載,而不是簡單地隱藏。
九、消除死代碼和無用的變數
在開發和修改應用程式時,可能遺留了死代碼— 代碼中的一個完整過程,而它並沒有被任何地方調用。也可能聲明瞭一些不用的變數。雖然,在創建 .exe 檔中,Visual Basic 確實可刪除無用的常數,但不能刪除無用的變數和死代碼。注意要複查代碼,查找並刪除無用的變數和死代碼。例如,Debug.Print 語句,在運行 .exe 時被忽略,可它常常出現在 .exe 檔中。
當創建 .exe 檔時,含有字串和變數作為參數的 Debug.Print 語句不會被編譯。但是,對於含有函數作為參數的 Debug.Print 語句,其本身被編譯器忽略,而函數則被編譯。因此,在應用程式運行時,函數被調用,但傳回值被忽略。因為,在 .exe 檔中,函數作為 Debug.Print 的參數出現時,將佔用空間和 CPU 週期時間,所以在生成 .exe 檔前,最好刪除這些語句。
在「編輯」功能表中使用「查找」命令搜索特定變數的引用。或者,當 每個模組都含有 Option Explicit 語句時,通過刪除或注釋該變數的聲明,並運行應用程式,可迅速發現變數是否被使用。若該變數被使用,則 Visual Basic 將出錯。若不出錯,則該變數沒被使用。
留言