VisualBasic工程规格限制
已有 2010 次阅读2015-6-27 10:26
|个人分类:vb入门
一个单项工程可以包含多达32,000个"标识符"(非保留字),它们包括(但不限于)窗体、控件、模块、变量、常量、过程、函数和对象。注意,实际的标识符数受可用内存的限制。
VisualBasic中的变量名不多于255个字符,而窗体、控件、模块和类名不多于40个字符。VisualBasic不限制工程中不同对象的实际数目。
控件限制
每个非图形的控件(除形状、直线、图像和标签之外的所有控件)都使用一个窗口。每个窗口都使用系统资源,所以可同时存在的窗口总数受到可用资源的限制。
确切的限制取决于可用的系统资源和使用的控件类型。为了减低系统资源的消耗,在创建或显示图形时,可以使用形状、直线、标签和图像控件而不用图片框控件。
1、控件总数
单个窗体允许使用的最大控件数目取决于使用的控件类型和可用的系统资源。然而,有每个窗体只允许254个控件名的固定限制。因为数组中的所有控件共享一
个控件名,所以控件数组仅对这一限制计数一次。在所有的版本中,对控件数组索引的限制是在0到32,767的范围之内。如果在每个控件的顶层上再安放控
件,例如在框架中嵌套框架控件,VisualBasic一般只接受不多于25层的嵌套控件。
2、对特殊控件的限制
下表列出了用于VisualBasic中特殊控件的属性限制。
List和ListCount列表框控件和组合框控件:项数最多为32K,对每项大小的限制为1K(1024字节);
Text文本框控件:限制为64K;
Caption标签控件:限于1024字节;
命令按钮控件、复选框控件、框架控件和选项按钮控件:限于255个字符,任何超过这些限制的标题均被截尾;
自定义控件属性的标题:限于32K
菜单控件:限于235个字符
Tag所有控件:仅限于可用的内存大小
Name所有控件:限于40个字符
注意,在VisualBasic中,控件属性名限于30个字符。
代码限制
可被加载到窗体、类或标准模块的代码总数限于65,534行。一行代码限于1023个字节。在一行中的实际文本之前最多只能有256个空格的前导,在一个逻辑行中最多只能有25个续行符(_)。
1、过程、类型和变量
对每个模块的过程数没有限制。每个过程可包含至多64K的代码。如果过程或模块超过这一限制,VisualBasic便产生编译时间错误。如果遇到这种
错误,可将特别大的过程分割成若干个较小的过程,或将模块级声明移到另一模块,来避免此类错误发生。VisualBasic用表来保存代码中的标识符名
(变量、过程、常量等)。每个表限于64K。
2、动态链接库声明表
每个窗体和代码模块使用一个描述动态链接库入口点的结构的表。每个结构约40个字节,表的大小限于64K,形成每个模块大约有1500个声明。
3、工程名表
整个应用程序用一张包含所有名称的表。这些名称包括:
·常量名
·变量名
·自定义的类型定义名
·模块名
·DLL过程声明名
对工程名表总大小没有限制,但是区分大小写的条目不得超过32K。如果超过了32K的限制,可以在不同的模块中重新使用private标识符以限制区分大小写的条目数到达32K。
4、输入表
在不同的模块中每引用一个标识符,便在输入表中创建一个条目。每一个这样的入口最小是24字节,但限于64K,这样每个模块大约可以有2000个引用。
5、模块条目表
该表中每个模块最多达125个字节,但有64K的总限制,这样每个工程大约可以产生400个模块。
数据限制
应用于VisualBasic语言中变量的限制有下面各种。
1、窗体、标准和类模块数据
VisualBasic中任何窗体或模块的VBA模块数据段(即在声明部分中定义的数据)有多达64K的数据段,该数据段包括下列数据:
·用Static声明的局部变量
·不是数组和变长字符串的模块级变量
·每个模块数组和变长字符串占4个字节 '说明数组和字符串是以指针方式传参
2、过程、类型和变量
如果过程或模块超过64K的代码限制,VisualBasic便产生一个编译时错误。
如果一个过程中定义的局部变量超过64K,则产生“太多的局部非静态变量”错误。
如果一个模块中定义的模块级变量超过64K,或定义的自定义类型大于64K,则产生“固定或静态数据不能超过64K”错误。
如果遇到这类错误,可将一个太大的过程分割成若干较小的过程,或将模块级声明移到另一模块中,来避免这种错误的发生。
作为变量声明的数组不能使用全部数组空间;只有数组描述符对64K的限制起作用。例如,在过程中声明或作为模块级声
明,Dimx(1000000)AsByte。然而,如果在记录中声明了一个大的、固定大小的数组,然后将这些记录的示例声明为变量时,就会发生内存溢
出。
3、自定义的类型
虽然许多自定义类型的变长字符串的总和可以超过64K(每个自定义类型的变长字符串仅占4个字节;而字符串的实际内容是分别存储的)但自定义类型的变量不能超过64K。自定义类型可用其它自定义类型来定义,但这种类型的总大小不能超过64K。
4、堆栈空间
在运行时过程中的参数和局部变量占用堆栈空间。而模块级变量和静态变量不占堆栈空间,因为它们被分配在窗体或模块的数据段中。任何被调用的DLL过程,在执行时都要使用堆栈。
VisualBasic自己也使用堆栈,例如,在计算表达式时保存中间值。
VisualBasic全部可用堆栈的大小是每线程一兆字节(1MB)。然而,如果有相邻的闲置内存,堆栈的大小可以超过这个限定。‘这句话值得推敲,事实上可能不是这样的。
系统资源限制
对于VisualBasic和用它建立的应用程序的某些限制,是受MicrosoftWindows的影响。这些限制会因MicrosoftWindows的版本不同而不同。
每个打开的窗口都要使用系统资源(MicrosoftWindows使用的数据区)。如果超出系统资源范围运行,就会产生运行时错误“Windows运
行的可用资源不足”。可以从WindowsNT3.51的“程序管理器”或“文件管理器”的“帮助”菜单中选取“关于”,或者从Windows95和
WindowsNT4.0的“Windows资源管理器帮助”菜单中选取“关于”,来检测剩余的系统资源的百分比。应用程序也能调用Windows的
APIGetFreeSystemResources来回收系统资源、关闭窗口(例如打开的窗体和“代码”窗口,以及在其它应用程序中的窗口)并退出运行
的应用程序。