主题:[讨论] VFP中的全局变量最大承受能力是多少?
北京种子乐
[专家分:3710] 发布于 2008-05-28 04:10:00
____本人为了编程方便,为每个表格建立了一个对应的设置表,表中注明了表格中各列名称、宽度、字段名、字段类型等11列信息,系统运行初又将这些表制成了全局变变量的数组,再用数组去设置表格。
软件开发之初只有几个表格时感觉很好,随着软件越编越大,这种设置表越来越多,这种全局变量数组也就越来越多,刚才我数了一下,是65个,按稍大一点的每个表按50个记录记录计算,那就是:65*50*11=35750,也就是说仅这一项系统中就有35750个全局变量了,其它方面也使用了很多全局变量,因为本人编软件向来就有使用全局变量的习惯。
06年07年本人就发帖讨论过全局变量的使用问题,有几位高师均表示全局变量使用过多,危害极大,建议不用或少用,自从那时起本人对使用全局变量有所收敛。
现在的问题是VFP对全局变量究竟有多大的承受能力,如果VFP的全局变量资源很多,不充分运用那就是资源的浪费,如果超出了VFP的全局变量承受能力,系统运行就会出问题。
讲回到主题上,我现在是想把上面提到的那些为设置表格而生成的全局变量数组去掉,直接用设置表去设置表格,但这项改造工程量很大,难度也很大,还会给软件造成一个时期的不稳定。那么这种改造是不是值得?是不是有必要?敬请各位高师指点,在下这边有礼了。
最后更新于:2008-05-28 06:02:00
回复列表 (共37个回复)
沙发
cbl518 [专家分:57140] 发布于 2008-05-28 04:59:00
功能 容量
默认的内存变量数目 16,384
内存变量的最大数目 65,000
数组的最大数目 65,000
每个数组中元素的最大数目 一般: 2G 字节、成员数组: 2G 字节、对象成员数组: 65,000
板凳
cbl518 [专家分:57140] 发布于 2008-05-28 05:05:00
一个数组的计量单位:是一个存储单位(整个数组),而不是按数组元素。
3 楼
cbl518 [专家分:57140] 发布于 2008-05-28 05:21:00
[quote] 直接用设置表去设置表格,但这项改造工程量很大,难度也很大,还会给软件造成一个时期的不稳定。那么这种改造是不是值得?是不是有必要?
[/quote]
这种方法好多了,直接使用设置表,可以节约大量内存资源,而且读取表速度,比较读取内存快,稳定性好。
你可直接在用户调整参数时,或使用相应表时,再直接读取参数表。不用启动时,一次性都调入,
用 编辑--〉替换(全部对像)的,功能替换原来的变量。
4 楼
北京种子乐 [专家分:3710] 发布于 2008-05-28 05:57:00
[quote]功能 容量
默认的内存变量数目 16,384
内存变量的最大数目 65,000
数组的最大数目 65,000
每个数组中元素的最大数目 一般: 2G 字节、成员数组: 2G 字节、对象成员数组: 65,000
[/quote]
按照1楼提供的VFP内存变量数目参数,我想我的这项改造工程是没有必要的了。
就按最少的默认的内存变量数目16,384考虑,我的全局变量变量使用个数应该在1000个左右,还不到1/16。
按照每个数组中元素的最大数目2G字节,我那种50*11的数组应该远远低于2G字节吧?
5 楼
l021126 [专家分:660] 发布于 2008-05-28 09:00:00
Visual FoxPro 系统容量(VFP9)
表和索引文件
功能 容量
每个表文件记录的最大数目 10 亿
表文件大小的最大值 2G 字节
FPT 文件大小的最大值 2G 字节
每个记录中字符的最大数目 65,500
每个记录中字段的最大数目 (1) 255
一次同时打开的表的最大数目 (2) 65,535
每个表字段中字符的最大数目 254
非压缩索引中每个索引关键字的最大字节数(3) 100
压缩索引中每个关键字的最大字节数(3) 240
每个表打开的索引文件数(2) 受可用内存的限制
所有工作区中可以打开的索引文件数的最大值(2) 受可用内存的限制
关系数的最大值 受可用内存的限制
关系表达式的最大长度 受可用内存的限制
字段
功能 容量
字符字段大小的最大值 254
数值型和浮点型字段大小的最大值 20
自由表中各字段名的字符数的最大值 10
数据库包含的表中各字段名的字符数最大值 128
整数的最小值 -2,147,483,647
整数的最大值 2,147,483,647
在数字计算中精确的位数。Visual FoxPro 在精确的计算中能够处理的数字等于 9007199254740992 (2^53)。 16
其他:
64 位 = 8 字节
大数 = 10 ^ 308 = 2 ^ 1023
-> 10 位每个指数 + 1 指数符号加 1 数字符号 => 12 位
剩余 52 位尾数 + 1 默许规格位 -> 53 位
LOG10(2^53) = 15.95 小数位数数字精度
变量和数组
功能 容量
默认的内存变量数目 16,384
内存变量的最大数目 65,000
数组的最大数目 65,000
每个数组中元素的最大数目 一般: 2G 字节
成员数组: 2G 字节
对象成员数组: 65,000
程序和过程文件
功能 容量
源程序文件中行的最大数目 受可用内存的限制
编译后的程序模块大小的最大值(4) 受可用内存的限制
每个文件中过程的最大数目 受可用内存的限制
嵌套的 DO 调用的最大数目 128 (默认值)
嵌套的 READ 层次的最大数目 5
嵌套的结构化程序设计命令的最大数目 384
传递参数的最大数目 26
事务处理的最大数目 5
关于 #INCLUDE 编译器的最大层次数 4
报表
功能 容量
报表定义中对象数的最大值 受可用内存的限制
单一报表带最大高度 20 英寸 | 50.8 厘米 | 1920 像素
数据分组层次的最大数目 74
字符报表变量名或报表表达式的最大长度 255
细节带最大的数目 20
运行时刻一个报表的最大页数 65534 在对象辅助预览中,受可用GDI+资源限制
其他
功能 容量
打开的窗口(各种类型)的最大数目(2) 受可用内存的限制
打开的“浏览”窗口的最大数目 255
每个字符串的字符或内存变量的最大数目 16,777,184
每个命令行最多的字符数 8,192
在一个报表中每个标签控件字符数的最大值 252
每个宏替代行字符的最多数目 8,192
打开文件的最大数目 操作系统的限制
键盘宏中键击数的最大值 1,024
SQL SELECT 语句可以选择的字段数的最大值 255
一行文字的最大长度 255
(1) 若一个或多个字段允许 null 值,限制值将降为 1 到 254 个字段。
(2) 受内存及可用的文件句柄的限制。cdx 文件只使用一个文件句柄。
(3) 如果设置排序序列为 MACHINE ,则每个字符占用一个字节。如果排序序列设置不是 MACHINE ,则每个字符占用两个字节。如果索引字段支持 null 值,索引关键字将多使用一个字节。要注意的是非 MACHINE 索引肯定是压缩的。
(4) 一个程序模块就是一个过程。程序或应用程序中可以包含无限多个程序模块。
6 楼
北京种子乐 [专家分:3710] 发布于 2008-05-28 11:24:00
一个项目管理器能管理多少个.PRG文件,我的软件中.PRG文件已经600多个了,应该不会超限吧?
7 楼
cbl518 [专家分:57140] 发布于 2008-05-28 13:00:00
程序或应用程序中,可以包含无限多个,程序模块。
所以,项目管理器就能管理,无限多个程序模块。
8 楼
北京种子乐 [专家分:3710] 发布于 2008-05-28 13:47:00
[quote]程序或应用程序中,可以包含无限多个,程序模块。
所以,项目管理器就能管理,无限多个程序模块。[/quote]
言之有理 [em28]
9 楼
北京种子乐 [专家分:3710] 发布于 2008-05-31 11:59:00
系统中是尽量多用全局变量还是尽量少用全局变量?
这个问题是革命的首要问题,
各位VFP同志,勿必充分注意,
万万不可粗心大意。
10 楼
0901chang [专家分:10660] 发布于 2008-05-31 12:30:00
我是尽量少用,并且数组基本不用,但我使用的全局变量也超过2000个。
若你用数组去存你的表,则另外占内存,若内存不够,操作系统就用硬盘来当内存,运行速度可能将有所影响,但在你的软件中操作人员不一定能感觉出来。
其实只要你不超过系统的限制,用多少全局变量都没有关系,因为你的系统只是一个小系统,不是那种需要耗费巨大系统资源的软件,就照着你的习惯去用吧,况且,vfp9的内存管理比vfp6有了巨大的提高,而在vfp6中已经不存在你忧虑的问题。
甬车兄,你多虑了。
我来回复