本文介绍了6种方法可用于缩小应用程序所需内存和减少代码大小,希望能对初学者有所帮助.
3、考虑替换Variant数据类型
Variant数据类型使用极其灵活,但是比其他数据类型所占内存大。当要压缩应用程序多余的空间时,应考虑用其他数据类型替代Variant变量,特别是替代Variant变量数组。
每一个Variant占用16个字节,而Integer占2个字节,Double占8个字节。变长字符串变量占用4个字节加上字符串中每一个字符占用1个字节,但是,每一个包含字符串的Variant都要占用16个字节加上字符串中每一个字符占用1个字节。因为它们太大,因此在用作局部变量或过程的参数时,Variant变量是特别烦人的,这是因为它们消耗堆栈空间太快。但在有些情况下,使用其他数据类型替代Variant,灵活性降低了,为弥补损失的灵活性,不得不增加更多的代码。结果是大小没有真正的减小。
4、使用动态数组并在删除时回收内存 使用动态数组代替固定数组。当不再需要动态数组的数据时,用Erase或ReDim Preserve放弃不需要的数据,并回收数组所用内存。例如,用以下代码可回收动态数组所用空间:
里,Erase完全删除数组,ReDim Preserve则只缩短数组而不丢失其内容:
ReDim Preserve MyArray(10, smallernum) |
删除了固定大小数组,也不能回收该数组所占空间--只是简单地清除数组每一元素中的值。如果元素是字符串,或包含字符串或数组的Variant变量,那么删除数组可回收这些字符串或Variants所占内存,而不是数组本身所占内存。
5、回收被字符串或对象变量用过的空间 当过程结束时,可自动回收(非静态)局部字符串和数组变量所用空间。但是,全局和模块级的字符串和数组变量一直存活到整个程序结束。要想应用程序尽量小,就得尽可能回收这些变量所用空间。将零长度字符串赋给字符串变量,可回收其空间:
同样,将对象变量设置成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将出错。若不出错,则该变量没被使用。
查看本文来源