国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何編寫高質量的VB代碼

2024-07-21 02:20:31
字體:
來源:轉載
供稿:網友
 

前言

  什么是一個高效的軟件?一個高效的軟件不僅應該比實現同樣功能的軟件運行得更快,還應該消耗更少的系統資源。這篇文章匯集了作者在使用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

  很不幸的是,我們常??梢栽趯嶋H的代碼中發現類似于上面的代碼。這樣做只會使代碼的執行速度更慢。原因是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
' 正確的代碼
for icount = 1 to 10
' 執行操作
next icount

  10. 使用數組,而不是多個變量

  當你有多個保存類似數據的變量時,可以考慮將他們用一個數組代替。在vb中,數組是最高效的數據結構之一。

  11. 使用動態數組,而不是靜態數組

  使用動態數組對代碼的執行速度不會產生太大的影響,但是在某些情況下可以節約大量的資源。

  12. 銷毀對象

  無論編寫的是什么軟件,程序員都需要考慮在用戶決定終止軟件運行后釋放軟件占用的內存空間。但遺憾的是很多程序員對這一點好像并不是很在意。正確的做法是在退出程序前需要銷毀程序中使用的對象。例如:

dim fso as new filesystemobject
' 執行操作
' 銷毀對象
set fso = nothing
對于窗體,可以進行卸載:
unload frmmain 

  或

set frmmain = nothing

  13. 變長和定長字符串

  從技術上來說,與變長字符串相比,定長字符串需要較少的處理時間和空間。但是定長字符串的缺點在于在很多情況下,你都需要調用trim函數以去除字符串末的空字符,這樣反而會降低代碼效率。所以除非是字符串的長度不會變化,否則還是使用變長字符串。

  14. 使用類模塊,而不是activex控件

  除非activex控件涉及到用戶界面,否則盡量使用輕量的對象,例如類。這兩者之間的效率有很大差異。

  15. 使用內部對象

  在涉及到使用activex控件和dll的時候,很多程序員喜歡將它們編譯好,然后再加入工程中。我建議你最好不要這樣做,因為從vb連接到一個外部對象需要耗費大量的cpu處理能力。每當你調用方法或存取屬性的時候,都會浪費大量的系統資源。如果你有activex控件或dll的源代碼,將它們作為工程的私有對象。

  16. 減少模塊的數量

  有些人喜歡將通用的函數保存在模塊中,對于這一點我表示贊同。但是在一個模塊中只寫上二三十行代碼就有些可笑了。如果你不是非常需要模塊,盡量不要使用它。這樣做的原因是因為只有在模塊中的函數或變量被調用時,vb才將模塊加載到內存中;當vb應用程序退出時,才會從內存中卸載這些模塊。如果代碼中只有一個模塊,vb就只會進行一次加載操作,這樣代碼的效率就得到了提高;反之如果代碼中有多個模塊,vb會進行多次加載操作,代碼的效率會降低。

  17. 使用對象數組

  當設計用戶界面時,對于同樣類型的控件,程序員應該盡量使用對象數組。你可以做一個實驗:在窗口上添加100個picturebox,每個picturebox都有不同的名稱,運行程序。然后創建一個新的工程,同樣在窗口上添加100個picturebox,不過這一次使用對象數組,運行程序,你可以注意到兩個程序加載時間上的差別。

  18. 使用move方法

  在改變對象的位置時,有些程序員喜歡使用width,height,top和left屬性。例如:

image1.width = 100
image1.height = 100
image1.top = 0
image1.left = 0

  實際上這樣做效率很低,因為程序修改了四個屬性,而且每次修改之后,窗口都會被重繪。正確的做法是使用move方法:

image1.move 0,0,100,100

  19. 減少圖片的使用

  圖片將占用大量內存,而且處理圖片也需要占用很多cpu資源。在軟件中,如果可能的話,可以考慮用背景色來替代圖片--當然這只是從技術人員的角度出發看這個問題。

  20. 使用activex dll,而不是activex控件

  如果你設計的activex對象不涉及到用戶界面,使用activex dll。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 唐山市| 日喀则市| 孝义市| 株洲市| 宁安市| 新田县| 凤城市| 武山县| 波密县| 彰化县| 綦江县| 金昌市| 冷水江市| 阳春市| 加查县| 丰城市| 津市市| 桃源县| 临夏县| 广河县| 梨树县| 察雅县| 司法| 余干县| 团风县| 乌鲁木齐市| 呼伦贝尔市| 宁陕县| 荆州市| 左贡县| 德阳市| 崇信县| 清新县| 梅河口市| 东丰县| 施秉县| 定结县| 高陵县| 福贡县| 正宁县| 富宁县|