提高VB程序的运行效率 云飞 2001年 24期 当你编写好一个程序,所有的代码都顺利地调试通过时,我想你肯定会欣喜若狂的。但不知你有没有考虑过程序的运行效率?与其它编程语言相比较,VB简单易学、功能强大,但其代码运行效率低下,因此,对程序代码进行优化是十分必要的。   下面,就依照我在编程过程中总结的一些经验,给大家谈谈。   #11.避免使用Variant变量   Variant变量是VB的缺省变量类型,程序中凡是未加类型说明的变量均被认为是Variant变量,Variant变量是一种变体型变量,它能够存放各种数据类型,可以放入数值、字符串、布尔值及日期等任何数据,其数据类型由最近放入的值决定。使用这种变量对于处理速度不成问题的应用程序来说,是非常方便的。然而,如果想提高应用程序的实际速度,就要避免使用变体型变量。因为,在运行时Variant将转化为适当的数据类型,而转化的过程是需要时间的。如果直接采用其它简单的数据类型,就可以避免不必要的类型转换操作而加快应用程序的速度;另外,每个Variant变量都要占用16位+1个类型位的存储空间,比其他数据类型都要多得多。避免使用Variant变量的办法是在每个模块前加上Option Explicit语句,这样所有的变量在使用前都必须进行声明。这样设置以后,如果程序中使用了未加声明的变量,在运行时VB就会弹出对话框来提醒你。   #12.选用最适当的数据类型   程序中要尽量避免使用Currency、Single和Double变量,并尽量使用Long整型变量,尤其在循环体中。因为Long整型变量是32位CPU的本机数据类型,所以其操作非常快。如果无法使用Long变量,就要尽量使用Integer或Byte数据类型。很多时候,即使在要求使用浮点数的情况下,也可以使用Long整型变量。例如,在窗体和图形控件的ScaleMode属性设置为像素时,就可以在控件和图形方法中使用Long整型变量表示大小和位置。   进行除法运算时,结果如果不需要小数部分,就可以使用整数除法运算符(\)。由于浮点运算需要转移到协处理器上进行,而整数运算并不需要,所以整数运算总是比浮点运算快。如果确实需要做小数运算,则应选取相对较快的数据类型。在VB中各种数值数据类型的运算速度顺序如下(由快到慢):Long>Interge>Byte>Single>Double>Currency。   #13.将常用的属性值、函数返回值缓存在变量中   一般来说,变量的处理速度比同类型的属性处理速度快许多,因此,如果经常用到某一属性值(如在循环体中),应该先将该属性值赋与某一变量,以后用该变量代替该属性,这样就能够提高代码的速度。比如,像这样的代码就比较慢:   For I=0 to 10   Label(I).left=text1.left   Next I   下面改写的代码就要快得多:   Labelleft=text1.left   For I =0 to 10   Label(I).left=labelleft   Next I   同样,对于函数的返回值,也可用变量暂存其返回值,避免经常调用运行的动态链接库,这样会大幅度地提高速度。如:某程序中多次用到mid(text1.text,1,5),则可先用一变量Tempstring保存Mid(text1.text,1,5)的值,之后凡是用到该值的地方一律用Tempstring代替。   #14.图片共享   如果在设计时将相同的图片加载到几个窗体可控件中,每一个窗体或控件都存储了该图片的一个副本。然而如果将图片存于一个窗体中,而让其它窗体或控件共享该图片,这样既可以减少程序的大小(因为不包含冗余的图片拷贝)又可加快速度(不必从磁盘中多次加载)。如下面的代码:   Picture=LoadPicture("c:\windows\pic\chess.bmp")   Image1.picture=picture'使用同一图片   Picture1.picture=picture   比下列加载了同一位图的三个副本的代码要好得多。   Picture=LoadPicture("c:\windows\pic\chess.bmp")   Image1.picture= LoadPicture("c:\windows\pic\chess.bmp")   Picture1.picture= LoadPicture("c:\windows\pic\chess.bmp")   