如何編寫高品質的VB代碼(1)

來源:互聯網
上載者:User
如何編寫高品質的VB代碼
  簡介:
  本文描述了如何通過一些技術手段來提高VB代碼的執行效率。這些手段可以分為兩個大的部分:編碼技術和編譯最佳化技術。在編碼技術中介紹了如何通過使用高效的資料類型、減少外部參考等編程手段來提高代碼執行速度,減少代碼消耗的系統資源。在編譯最佳化技術中介紹了如何正確地利用VB提供的編譯選項對在編譯時間最後產生的可執行檔進行最佳化。
  前言
  什麼是一個高效的軟體?一個高效的軟體不僅應該比實現同樣功能的軟體運行得更快,還應該消耗更少的系統資源。這篇文章彙集了作者在使用VB進行軟體開發時積累下來的一些經驗,通過一些簡單的例子來向你展示如何寫出高效的VB代碼。其中包含了一些可能對VB程式員非常有協助的技術。在開始之前,先讓我陳清幾個概念。
  讓代碼一次成型:在我接觸到的程式員中,有很多人喜歡先根據功能需求把代碼寫出來,然後在此基礎上最佳化代碼。最後發現為了達到最佳化的目的,他們不得不把代碼再重新寫一遍。所以我建議你在編寫代碼之前就需要考慮最佳化問題。
  把握好最佳化的結果和需要花費的工作之間的關係:通常當完成了一段代碼,你需要檢查和修改它。在檢查代碼的過程中,也許你會發現某些迴圈中的代碼效率還可以得到進一步的改進。在這種情況下,很多追求完美的程式員也許會立馬修改代碼。我的建議是,如果修改這段代碼會使程式的已耗用時間縮短一秒,你可以修改它。如果只能帶來10毫秒的效能改進,則不做任何改動。這是因為重寫一段代碼必定會引入新的錯誤,而調試新的代碼必定會花掉你一定的時間。程式員應該在軟體效能和開發軟體需要的工作量之間找一個平衡點,而且10毫秒對於使用者來說也是一個不能體會到的差異。
  在需要使用物件導向方法的時候盡量使用它;VB提供的機制不完全支援物件導向的設計和編碼,但是VB提供了簡單的類。大多數人認為使用對象將導致代碼的效率降低。對於這一點我個人有些不同的意見;考察代碼的效率不能純粹從運行速度的角度出發,軟體佔用的資源也是需要考慮的因素之一。使用類可以協助你在整體上提升軟體的效能,這一點我會在後面的例子中詳細說明。
  當你編寫VB代碼的時候,希望你能把上面幾點作為指導你編碼的原則。我把文章分為兩個部分:如何提高代碼的運行速度和編譯最佳化。
  如何提高代碼的運行速度
  下面的這些方法可以協助你提高代碼的運行速度:
  1. 使用整數(Integer)和長整數(Long)
  提高代碼運行速度最簡單的方法莫過於使用正確的資料類型了。也許你不相信,但是正確地選擇資料類型可以大幅度提升代碼的效能。在大多數情況下,程式員可以將Single,Double和Currency類型的變數替換為Integer或Long類型的變數,因為VB處理Integer和Long的能力遠遠高於處理其它幾種資料類型。
  在大多數情況下,程式員選擇使用Single或Double的原因是因為它們能夠儲存小數。但是小數也可以儲存在Integer類型的變數中。例如程式中約定有三位小數,那麼只需要將儲存在Integer變數中的數值除以1000就可以得到結果。根據我的經驗,使用Integer和Long替代Single,Double和Currency後,代碼的運行速度可以提高將近10倍。
  2. 避免使用變體
  對於一個VB程式員來說,這是再明顯不過的事情了。變體類型的變數需要16個位元組的空間來儲存資料,而一個整數(Integer)只需要2個位元組。通常使用變體類型的目的是為了減少設計的工作量和代碼量,也有的程式員圖個省事而使用它。但是如果一個軟體經過了嚴格設計和按照規範編碼的話,完全可以避免使用變體類型。
  在這裡順帶提一句,對於Object對象也存在同樣的問題。請看下面的代碼:
Dim FSO
Set FSO = New Scripting.FileSystemObject
  或
Dim FSO as object
Set FSO = New Scripting.FileSystemObject
  上面的代碼由於在申明的時候沒有指定資料類型,在賦值時將浪費記憶體和CPU時間。正確的代碼應該象下面這樣:
Dim FSO as New FileSystemObject
3. 盡量避免使用屬性
  在平時的代碼中,最常見的比較低效的代碼就是在可以使用變數的情況下,反覆使用屬性(Property),尤其是在迴圈中。要知道存取變數的速度是存取屬性的速度的20倍左右。下面這段代碼是很多程式員在程式中會使用到的:
Dim intCon as Integer
For intCon = 0 to Ubound(SomVar())
Text1.Text = Text1.Text & vbcrlf & SomeVar(intCon)
Next intCon
  下面這段代碼的執行速度是上面代碼的20倍。
Dim intCon as Integer
Dim sOutput as String
For intCon = 0 to Ubound(SomeVar())
sOutput = sOutput & vbCrlf &
SomeVar(intCon)
Next
Text1.Text = sOutput
  4. 盡量使用數組,避免使用集合
  除非你必須使用集合(Collection),否則你應該盡量使用數組。據測試,數組的存取速度可以達到集合的100倍。這個數字聽起來有點駭人聽聞,但是如果你考慮到集合是一個對象,你就會明白為什麼差異會這麼大。
  5. 展開小的迴圈體
  在編碼的時候,有可能遇到這種情況:一個迴圈體只會迴圈2到3次,而且迴圈體由幾行程式碼群組成。在這種情況下,你可以把迴圈展開。原因是迴圈會佔用額外的CPU時間。但是如果迴圈比較複雜,你就沒有必要這樣做了。
  6. 避免使用很短的函數
  和使用小的迴圈體相同,調用只有幾行代碼的函數也是不經濟的--調用函數所花費的時間或許比執行函數中的代碼需要更長的時間。在這種情況下,你可以把函數中的代碼拷貝到原來調用函數的地方。
  7. 減少對子物件的引用
  在VB中,通過使用.來實現對象的引用。例如:
Form1.Text1.Text
  在上面的例子中,程式引用了兩個對象:Form1和Text1。利用這種方法引用效率很低。但遺憾的是,沒有辦法可以避免它。程式員唯一可以做就是使用With或者將用另一個對象儲存子物件(Text1)。
注釋: 使用With
With frmMain.Text1
.Text = "Learn VB"
.Alignment = 0
.Tag = "Its my life"
.BackColor = vbBlack
.ForeColor = vbWhite
End With
  或者
注釋: 使用另一個對象儲存子物件
Dim txtTextBox as TextBox
Set txtTextBox = frmMain.Text1
TxtTextBox.Text = "Learn VB"
TxtTextBox.Alignment = 0
TxtTextBox.Tag = "Its my life"
TxtTextBox.BackColor = vbBlack
TxtTextBox.ForeColor = vbWhite
  注意,上面提到的方法只適用於需要對一個對象的子物件進行操作的時候,下面這段代碼是不正確的:
With Text1
.Text = "Learn VB"
.Alignment = 0
.Tag = "Its my life"
.BackColor = vbBlack
.ForeColor = vbWhite
End With
  很不幸的是,我們常常可以在實際的代碼中發現類似於上面的代碼。這樣做只會使代碼的執行速度更慢。原因是With塊編譯後會形成一個分枝,會增加了額外的處理工作。
  8. 檢查字串是否為空白
  大多數程式員在檢查字串是否為空白時會使用下面的方法:
If Text1.Text = "" then
注釋: 執行操作
End if
  很不幸,進行字串比較需要的處理量甚至比讀取屬性還要大。因此我建議大家使用下面的方法:
If Len(Text1.Text) = 0 then
注釋: 執行操作
End if
  9. 去除Next關鍵字後的變數名
  在Next關鍵字後加上變數名會導致代碼的效率下降。我也不知道為什麼會這樣,只是一個經驗而已。不過我想很少有程式員會這樣畫蛇添足,畢竟大多數程式員都是惜字如金的人。
注釋: 錯誤的代碼
For iCount = 1 to 10
注釋: 執行操作
Next iCount
注釋: 正確的代碼
For iCount = 1 to 10
注釋: 執行操作
Next
  10. 使用數組,而不是多個變數
  當你有多個儲存類似資料的變數時,可以考慮將他們用一個數組代替。在VB中,數組是最高效的資料結構之一。
  11. 使用動態數組,而不是靜態數組
  使用動態數組對代碼的執行速度不會產生太大的影響,但是在某些情況下可以節約大量的資源。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.