• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Visual Basic代碼優化的六條軍規

    發布: 2007-5-25 09:18 | 作者: 51pywg | 來源: programfan.com | 查看: 45次 | 進入軟件測試論壇討論

    領測軟件測試網

    在優化程序代碼大小的諸多技術中,大多包括從代碼中刪除不必要的元素。在編譯應用程序時,Visual Basic自動刪除某些元素。而標識符名稱、注釋、空行的長度或數量是無須限制的,當應用程序作為一個.EXE文件運行時,以上這些元素都不會影響應用程序所占內存的大小。其他元素,如變量、窗體和過程,確實要占據內存的一部分空間。最好將它們精簡以使效率更高。下面介紹6種方法可用于縮小應用程序所需內存和減少代碼大小,希望能對初學者有所幫助。

      1、減少加載窗體、控件數目和用標簽代替文本框

      每一個加載的窗體,無論可視與否,都要占據一定數量的內存(其數量隨窗體上控件的類型和數量,以及窗體上位圖的大小等的不同而變化)。只在需要顯示時才加載窗體,不再需要時卸載窗體(而不是隱藏窗體)。記住,任何對窗體的屬性、方法或控件的引用,或對用New聲明的窗體變量的引用,都會導致Visual Basic加載該窗體。

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

    Set Form=Nothing 

      當設計應用程序時,窗體應盡量少用控件。實際的限制取決于控件的類型和系統,但實際上,含有大量控件的窗體將運行緩慢。一項與之相關的技術是:設計時盡可能地使用控件數組,而不是在窗體上放置大量同類型的控件?丶䲠到M是一組具有共同名稱和類型的控件。它們的事件過程也相同。在設計時,使用控件數組添加控件所消耗的資源比直接向窗體添加多個相同類型的控件消耗的資源要少。當希望若干控件共享代碼時,控件數組也很有用。標簽控件Label占用的Windows資源比文本框Textbox少,因此在可能的情況下,應使用標簽代替文本框。例如,當窗體上需要一個隱藏的控件保存文本時,使用標簽更有效。

      2、使用磁盤文件或資源和組織模塊

      在設計時,直接放入應用程序的數據(象屬性或代碼中的文字字符串和數值)將增加運行時應用程序占用的內存。運行時從磁盤文件或資源中加載數據可減少占用內存。這對大位圖和字符串特別有價值。資源文件實際上是由一系列獨立的字符串、位圖或者其他項目組成的,其中每一項都有一個唯一的標識符?梢允褂妙愃朴谠贛icrosoft Visual C++中提供的文本編輯器和資源編譯器創建資源文件。編譯過的資源文件帶有.res擴展名。

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


      3、考慮替換Variant數據類型

      Variant數據類型使用極其靈活,但是比其他數據類型所占內存大。當要壓縮應用程序多余的空間時,應考慮用其他數據類型替代Variant變量,特別是替代Variant變量數組。

      每一個Variant占用16個字節,而Integer占2個字節,Double占8個字節。變長字符串變量占用4個字節加上字符串中每一個字符占用1個字節,但是,每一個包含字符串的Variant都要占用16個字節加上字符串中每一個字符占用1個字節。因為它們太大,因此在用作局部變量或過程的參數時,Variant變量是特別煩人的,這是因為它們消耗堆?臻g太快。但在有些情況下,使用其他數據類型替代Variant,靈活性降低了,為彌補損失的靈活性,不得不增加更多的代碼。結果是大小沒有真正的減小。

      4、使用動態數組并在刪除時回收內存

      使用動態數組代替固定數組。當不再需要動態數組的數據時,用Erase或ReDim Preserve放棄不需要的數據,并回收數組所用內存。例如,用以下代碼可回收動態數組所用空間:

    Erase MyArray 

      里,Erase完全刪除數組,ReDim Preserve則只縮短數組而不丟失其內容:

    ReDim Preserve MyArray(10, smallernum) 

      刪除了固定大小數組,也不能回收該數組所占空間--只是簡單地清除數組每一元素中的值。如果元素是字符串,或包含字符串或數組的Variant變量,那么刪除數組可回收這些字符串或Variants所占內存,而不是數組本身所占內存。

      5、回收被字符串或對象變量用過的空間

      當過程結束時,可自動回收(非靜態)局部字符串和數組變量所用空間。但是,全局和模塊級的字符串和數組變量一直存活到整個程序結束。要想應用程序盡量小,就得盡可能回收這些變量所用空間。將零長度字符串賦給字符串變量,可回收其空間:

    SomeString Var="" '回收空間 

      同樣,將對象變量設置成Nothing可回收該對象所用的部分(而不是全部)空間。例如,刪除一個Form對象變量:

    Global F As New StatusForm
    F.Show 1 'Form加載并以模態顯示
    X=F.Text1.Text '用戶按下按鈕,隱藏窗體
    Unload F '刪除窗體可視部分
    Set F=Nothing '回收空間(模塊數據) 

      即使沒有使用顯式窗體變量,也應注意將不再用的窗體卸載,而不是簡單地隱藏。

      6、消除死代碼和無用的變量

      在開發和修改應用程序時,可能遺留了死代碼--代碼中的一個完整過程,而它并沒有被任何地方調用。也可能聲明了一些不用的變量。雖然在創建.exe文件中,Visual Basic確實可刪除無用的常數,但不能刪除無用的變量和死代碼。注意要復查代碼,查找并刪除無用的變量和死代碼。如Debug.Print語句,在運行.exe時被忽略,可它常常出現在.exe文件中。

      當創建.exe文件時,含有字符串和變量作為參數的Debug.Print語句不會被編譯。但對于含有函數作為參數的Debug.Print語句,其本身被編譯器忽略,而函數則被編譯。因此,在應用程序運行時,函數被調用,但返回值被忽略。因為在.exe文件中,函數作為Debug.Print的參數出現時,將占用空間和CPU周期時間,所以在生成exe文件前,最好刪除這些語句。

      在"編輯"菜單中使用"查找"命令搜索特定變量的引用;蛘弋斆總模塊都含有Option Explicit語句時,通過刪除或注釋該變量的聲明,并運行應用程序,可迅速發現變量是否被使用。若該變量被使用,則Visual Basic將出錯。若不出錯,則該變量沒被使用。

     

    [分享]優化減少VB程序的內存占用的方法幾則

    ※圖片
    ·不要在VB的IDE的屬性列表中直接設置圖片
    ·用資源文件存儲圖片,需要使用時才loadresPicture
    ·圖片使用256色壓縮位圖或GIF格式或JPG格式,不要使用24位色的BMP
    ·圖片使用完或不顯示時,用set image1.picture=nothing
    ·相同的圖片多次使用時,可用 image2.picture=image1.picture

    ※字符串
    ·不要使用const來定義字符串常量
    ·用資源文件存儲字符串,需要使用時才loadresString
    ·字符串使用完時,用str1=vbNullString
    ·字符串作為函數的參數時,不要用 byval 修飾
    ·函數的返回值少用字符串類型,而改放在函數的參數中
    ·使用控件的.Tag屬性存儲字符串數據

    ※對象或控件
    ·新建對象不使用 dim obj as new class1,而用 dim obj as class1 : set obj=new class1
    ·對象使用完 set obj=nothing
    ·窗體或控件使用完 unload xxx
    ·減少使用picturebox

    ※其他
    ·Variant 類型變量使用完用 var=Empty
    ·數組使用完用 Erase arr
    ·對于微型或小型數據庫或只讀型數據庫訪問,用SQLite 2數據庫代替Access 97/2000數據庫



    注:優化內存和優化速度兩者不可兼得。這里僅供參考。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>