VB代码优化的几个注意的要点

1. 使用整数(Integer)和长整数Long
  提高代码运行速度最简单的方法莫过于使用正确的数据类型了。也许你不相信,但是正确地选择数据类型可以大幅度提升代码性能。在大多数情况下,程序员可以将SingleDoubleCurrency类型的变量替换为IntegerLong类型的变量,因为VB处理IntegerLong的能力远远高于处理其它几种数据类型。

在大多数情况下,程序员选择使用SingleDouble的原因是因为它们能够保存小数。但是小数也可以保存在Integer类型的变量中。例如程序中约定有三位小数,那么只需要将保存在Integer变量中的数值除以1000就可以得到结果。使用IntegerLong替代SingleDoubleCurrency后,代码的运行速度可以提高将近10

2. 变体类型的变量需要16个字节的空间来保存数据,而一个整数(Integer)只需要2个字节。通常使用变体类型的目的是为了减少设计的工4作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。

对于Object对象也存在同样的问题。请看下面的代码

Dim FSO (没指定类型)

Set FSO = New Scripting.FileSystemObject

Dim FSO as object(指定一个变体类型)

Set FSO = New Scripting.FileSystemObject

上面的代码由于在申明的时候没有指定数据类型,在赋值时将浪费内存CPU时间。正确的代码应该象下面这样: 

Dim FSO as New FileSystemObject或者

Dim fso As FileSystemObject

Set fso = New FileSystemObject

也就是在声明变量的时候应该制定这个变量的类型,这样占用的资源会比变体类型占用的资源少。

3. 尽量避免使用属性(即多次操作控件属性

在平时的代码中,最常见的比较低效的代码就是在可以使用变量的情况下,反复使用属性Property),尤其是在循环中。要知道存取变量的速度是存取属性的速度的20倍左右。下面这段代码是很多程序员在程序中会使用到的:

Dim intCon as Integer

For intCon = 0 to Ubound(SomVar())

Text1.Text = Text1.Text & VBcrlf & SomeVar(intCon)

Next intCon
  下面这段代码的执行速度是上面代码20倍。

Dim intCon as Integer

Dim sOutput as String 

For intCon = 0 to Ubound(SomeVar())

sOutput = sOutput & vbCrlf &

SomeVar(intCon)

Next

Text1.Text = sOutput

可以将其赋值给一个变量然后操作这个变量,然后根据需要再把这个操作后的变量赋给控件属性

4. 尽量使用数组,避免使用集合

除非你必须使用集合(Collection),否则你应该尽量使用数组。据测试,数组的存取速度可以达到集合的100倍。考虑到集合是一个对象,就会明白为什么差异会这么大。
5.
展开小的循环体

在编码的时候,有可能遇到这种情况:一个循环体只会循环23次,而且循环体由几行代码组成。在这种情况下,你可以把循环展开。原因是循环会占用额外的cpu时间。但是如果循环比较复杂,你就没有必要这样做了。

6. 避免使用很短的函数

和使用小的循环体相同,调用只有几行代码函数也是不经济的--调用函数所花费的时间或许比执行函数中的代码需要更长的时间。在这种情况下,可以把函数中的代码拷贝到原来调用函数的地方。

7. 减少对子对象的引用

VB中,通过使用.来实现对象的引用。例如:

Form1.Text1.Text

在上面的例子中,程序引用了两个对象:Form1Text1。利用这种方法引用效率很低。但遗憾的是,没有办法可以避免它。程序员唯一可以做就是使用With或者将用另一个对象保存子对象(Text1)。

注释: 使用With

With frmMain.Text1

.Text = "Learn VB"

.Alignment = 0

.Tag = "Its my life"

.BackColor = vbBlack

.ForeColor = vbWhite

End With

或者

使用另一个对象保存子对象

Dim txtTextBox as TextBox

Set txtTextBox = frmMain.Text1

TxtTextBox.Text = "Learn VB"

TxtTextBox.Alignment = 0

TxtTextBox.Tag = "Its my life"

TxtTextBox.BackColor = vbBlack

TxtTextBox.ForeColor = vbWhite

注意,上面提到的方法只适用于需要对一个对象的子对象进行操作的时候,下面这段代码是不正确的:

With Text1

.Text = "Learn VB"

.Alignment = 0

.Tag = "Its my life"

.BackColor = vbBlack

.ForeColor = vbWhite

End With

很不幸的是,我们常常可以在实际的代码中发现类似于上面的代码。这样做只会使代码的执行速度更慢。原因是With块编译后会形成一个分枝,会增加了额外的处理工作。

8. 检查字符串是否为空

大多数程序员在检查字符串是否为空时会使用下面的方法

If Text1.Text = "" then

do somthing

End if

很不幸,进行字符串比较需要的处理量甚至比读取属性还要大。因此我建议大家使用下面的方法

If Len(Text1.Text) = 0 then

Do something

End if

9. 去除Next关键字后的变量名

Next关键字后加上变量名会导致代码的效率下降

错误代码

For iCount = 1 to 10

Do something

Next iCount

For iCount = 1 to 10

Do something

Next

10.使用数组,而不是用多个变量

当你有多个保存类似数据的变量时,可以考虑将他们用一个数组代替。在VB中,数组是最高效的数据结构之一。

11. 使用动态数组,而不是静态数组

使用动态数组对代码的执行速度不会产生太大的影响,但是在某些情况下可以节约大量的资源。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...