◆控件限制◆
每個非圖形的控件(除形狀、直線、圖像和標簽之外的所有控件)都使用一個窗口。每個窗口都使用系統(tǒng)資源,所以可同時存在的窗口總數(shù)受到可用資源的限制。確切的限制取決于可用的系統(tǒng)資源和使用的控件類型。為了減低系統(tǒng)資源的消耗,在創(chuàng)建或顯示圖形時,可以使用形狀、直線、標簽和圖像控件而不用圖片框控件。
1、控件總數(shù)
單個窗體允許使用的最大控件數(shù)目取決于使用的控件類型和可用的系統(tǒng)資源。然而,有每個窗體只允許254個控件名的固定限制。因為數(shù)組中的所有控件共享一個控件名,所以控件數(shù)組僅對這一限制計數(shù)一次。在所有的版本中,對控件數(shù)組索引的限制是在0到32,767的范圍之內(nèi)。如果在每個控件的頂層上再安放控件,例如在框架中嵌套框架控件,VisualBasic一般只接受不多于25層的嵌套控件。
2、對特殊控件的限制
下表列出了用于VisualBasic中特殊控件的屬性限制。
List和ListCount列表框控件和組合框控件:項數(shù)最多為32K,對每項大小的限制為1K(1024字節(jié));
Text文本框控件:限制為64K;
Caption標簽控件:限于1024字節(jié);
命令按鈕控件、復(fù)選框控件、框架控件和選項按鈕控件:限于255個字符,任何超過這些限制的標題均被截尾;
自定義控件屬性的標題:限于32K
菜單控件:限于235個字符
Tag所有控件:僅限于可用的內(nèi)存大小
Name所有控件:限于40個字符
注意,在VisualBasic中,控件屬性名限于30個字符。
◆代碼限制◆
可被加載到窗體、類或標準模塊的代碼總數(shù)限于65,534行。一行代碼限于1023個字節(jié)。在一行中的實際文本之前最多只能有256個空格的前導(dǎo),在一個邏輯行中最多只能有25個續(xù)行符(_)。
1、過程、類型和變量
對每個模塊的過程數(shù)沒有限制。每個過程可包含至多64K的代碼。如果過程或模塊超過這一限制,VisualBasic便產(chǎn)生編譯時間錯誤。如果遇到這種錯誤,可將特別大的過程分割成若干個較小的過程,或?qū)⒛K級聲明移到另一模塊,來避免此類錯誤發(fā)生。VisualBasic用表來保存代碼中的標識符名(變量、過程、常量等)。每個表限于64K。
2、動態(tài)鏈接庫聲明表
每個窗體和代碼模塊使用一個描述動態(tài)鏈接庫入口點的結(jié)構(gòu)的表。每個結(jié)構(gòu)約40個字節(jié),表的大小限于64K,形成每個模塊大約有1500個聲明。
3、工程名表
整個應(yīng)用程序用一張包含所有名稱的表。這些名稱包括:
·常量名
·變量名
·自定義的類型定義名
·模塊名
·DLL過程聲明名
對工程名表總大小沒有限制,但是區(qū)分大小寫的條目不得超過32K。如果超過了32K的限制,可以在不同的模塊中重新使用PRivate標識符以限制區(qū)分大小寫的條目數(shù)到達32K。
4、輸入表
在不同的模塊中每引用一個標識符,便在輸入表中創(chuàng)建一個條目。每一個這樣的入口最小是24字節(jié),但限于64K,這樣每個模塊大約可以有2000個引用。
5、模塊條目表
該表中每個模塊最多達125個字節(jié),但有64K的總限制,這樣每個工程大約可以產(chǎn)生400個模塊。
◆數(shù)據(jù)限制◆
應(yīng)用于VisualBasic語言中變量的限制有下面各種。
1、窗體、標準和類模塊數(shù)據(jù)
VisualBasic中任何窗體或模塊的VBA模塊數(shù)據(jù)段(即在聲明部分中定義的數(shù)據(jù))有多達64K的數(shù)據(jù)段,該數(shù)據(jù)段包括下列數(shù)據(jù):
·用Static聲明的局部變量
·不是數(shù)組和變長字符串的模塊級變量
·每個模塊數(shù)組和變長字符串占4個字節(jié)
2、過程、類型和變量
如果過程或模塊超過64K的代碼限制,VisualBasic便產(chǎn)生一個編譯時錯誤。
如果一個過程中定義的局部變量超過64K,則產(chǎn)生“太多的局部非靜態(tài)變量”錯誤。
如果一個模塊中定義的模塊級變量超過64K,或定義的自定義類型大于64K,則產(chǎn)生“固定或靜態(tài)數(shù)據(jù)不能超過64K”錯誤。
如果遇到這類錯誤,可將一個太大的過程分割成若干較小的過程,或?qū)⒛K級聲明移到另一模塊中,來避免這種錯誤的發(fā)生。
作為變量聲明的數(shù)組不能使用全部數(shù)組空間;只有數(shù)組描述符對64K的限制起作用。例如,在過程中聲明或作為模塊級聲明,Dimx(1000000)AsByte。然而,如果在記錄中聲明了一個大的、固定大小的數(shù)組,然后將這些記錄的示例聲明為變量時,就會發(fā)生內(nèi)存溢出。
3、自定義的類型
雖然許多自定義類型的變長字符串的總和可以超過64K(每個自定義類型的變長字符串僅占4個字節(jié);而字符串的實際內(nèi)容是分別存儲的)但自定義類型的變量不能超過64K。自定義類型可用其它自定義類型來定義,但這種類型的總大小不能超過64K。
4、堆??臻g
在運行時過程中的參數(shù)和局部變量占用堆??臻g。而模塊級變量和靜態(tài)變量不占堆??臻g,因為它們被分配在窗體或模塊的數(shù)據(jù)段中。任何被調(diào)用的DLL過程,在執(zhí)行時都要使用堆棧。
VisualBasic自己也使用堆棧,例如,在計算表達式時保存中間值。
VisualBasic全部可用堆棧的大小是每線程一兆字節(jié)(1MB)。然而,如果有相鄰的閑置內(nèi)存,堆棧的大小可以超過這個限定。
◆系統(tǒng)資源限制◆
對于VisualBasic和用它建立的應(yīng)用程序的某些限制,是受MicrosoftWindows的影響。這些限制會因MicrosoftWindows的版本不同而不同。
每個打開的窗口都要使用系統(tǒng)資源(MicrosoftWindows使用的數(shù)據(jù)區(qū))。如果超出系統(tǒng)資源范圍運行,就會產(chǎn)生運行時錯誤“Windows運行的可用資源不足”。可以從WindowsNT3.51的“程序管理器”或“文件管理器”的“幫助”菜單中選取“關(guān)于”,或者從Windows95和WindowsNT4.0的“Windows資源管理器幫助”菜單中選取“關(guān)于”,來檢測剩余的系統(tǒng)資源的百分比。應(yīng)用程序也能調(diào)用Windows的APIGetFreeSystemResources來回收系統(tǒng)資源、關(guān)閉窗口(例如打開的窗體和“代碼”窗口,以及在其它應(yīng)用程序中的窗口)并退出運行的應(yīng)用程序。
新聞熱點
疑難解答