全国计算机等级考试二级:如何编写高质量的VB代码

全国计算机等级考试二级:如何编写高质量的VB代码,第1张

全国计算机等级考试二级:如何编写高质量的VB代码,第2张

简介:

本文阐述了如何通过一些技术手段来提高VB代码的执行效率。这些方法可以分为两大部分:编码技术和编译优化技术。在编码技术中,介绍了如何通过使用高效的数据类型和减少外部引用来提高代码执行速度,减少代码消耗的系统资源。在编译优化技术中,介绍了如何正确使用VB提供的编译选项,对编译结束时生成的可执行文件进行优化。

什么是高效的软件?一个高效的软件不仅要比相同功能的软件运行得更快,而且要消耗更少的系统资源。本文收集了作者在使用VB开发软件时积累的一些经验,通过一些简单的例子向你展示如何写出高效的VB代码。里面包含了一些可能对VB程序员很有帮助的技术。在我们开始之前,让我介绍一些陈清的概念。
让代码一次成型:在我接触的程序员中,很多人喜欢先按照功能需求写代码,然后在此基础上优化代码。最后,发现他们不得不为了优化而重写代码。所以我建议你在写代码之前先考虑优化。
把握好优化的结果和需要花费的工作之间的关系:通常一段代码完成后,需要进行检查和修改。在检查代码的过程中,你可能会发现某些循环中的代码效率还可以进一步提高。这种情况下,很多追求完美的程序员可能会马上修改代码。我的建议是,如果修改这段代码会让程序运行时间缩短一秒,可以修改。如果只能带来10毫秒的性能提升,就不做任何改变。这是因为重写一段代码肯定会引入新的错误,调试新的代码肯定会花费你一些时间。程序员应该在软件性能和开发软件所需的工作量之间找到一个平衡点,10毫秒对于用户来说是一个察觉不到的差别。
需要的时候尽量使用面向对象的方法;VB提供的机制并不完全支持面向对象的设计和编码,但是VB提供了简单的类。大多数人认为使用对象会降低代码的效率。个人对这一点有一些不同的看法;代码的效率不能单纯从运行速度的角度来考察,软件占用的资源也是需要考虑的因素之一。使用类可以帮助你从整体上提高软件的性能,我将在后面的例子中详细解释。
当你写VB代码的时候,希望你能把以上几点作为你的编码原则。我的文章分为两部分:如何提高代码运行速度和编译优化。

如何提高代码的运行速度
以下方法可以帮助您提高代码的运行速度:

1.使用整数和长整数
提高代码速度最简单的方法就是使用正确的数据类型。您可能不相信,但是选择正确的数据类型可以极大地提高代码的性能。在大多数情况下,程序员可以将Single、Double和Currency类型的变量替换为Integer或Long类型的变量,因为VB处理Integer和Long的能力远高于其他数据类型。
大多数情况下,程序员选择使用Single或Double,因为它们可以保存小数。但是小数也可以保存在整型变量中。举个例子,如果程序中有三个小数位,你只需要把存储在Integer变量中的值除以1000就可以得到结果。根据我的经验,用整数和长型代替单、双和货币后,代码的运行速度可以提高近10倍。

2.避免使用变体
这对VB程序员来说是最明显的事情。Variant变量需要16个字节的空来存储数据,而Integer只需要2个字节。通常使用variant type的目的是为了减少设计的工作量和代码量,也有程序员为了省事而使用。但是,如果一个软件严格按照规范进行设计和编码,完全可以避免使用变体类型。
顺便说一下,Object对象也存在同样的问题。请参见下面的代码:
Dim FSO
Set FSO = new scripting . file system object

Dim FSO as object
Set FSO = new scripting . file system object
上述代码在赋值时会浪费内存和CPU时间,因为在声明时没有指定数据类型。正确的代码应该如下所示:
dimfso作为新的文件系统对象

3.尽量避免在平常的代码中使用Property
,最常见最低效的代码就是在可以使用变量的时候重复使用Property,尤其是在循环中。要知道访问变量的速度是访问属性的20倍左右。许多程序员在他们的程序中使用以下代码:
dimintcon as integer
for int con = 0 to ubound(somvar())
text 1 . text = text 1 . text & vbcrlf & somevar(int con)
next int con

下面这段代码的执行速度是上面这段代码的20倍。
Dim int con as Integer
Dim sout put as String
For int con = 0 to Ubound(some var())
sout put = sout put & VB crlf &
some var(int con)
Next
text 1。Text = sOutput

4.尽量使用数组,避免使用集合
除非必须使用集合,否则应该尽量使用数组。根据测试,数组的访问速度可以达到集合的100倍。这个数字听起来有点令人震惊,但是如果你考虑到一个集合是一个对象,你就会明白为什么差别如此之大。

5.展开小循环体
编码时,有可能遇到这种情况:一个循环体只会循环2、3次,循环体由几行代码组成。在这种情况下,您可以将循环展开。原因是循环会占用额外的CPU时间。但是如果循环比较复杂,就不用这么做了。

6.避免使用非常短的函数
。就像使用一个小循环一样,只用几行代码调用一个函数是不经济的——调用一个函数可能比执行函数中的代码要花更长的时间。在这种情况下,您可以将函数中的代码复制到最初调用该函数的位置。
7。减少对子对象的引用
在VB中,对对象的引用是通过使用..示例:
Form1。Text1.Text
在上面的例子中,程序引用了两个对象:Form1和Text1。用这种方法,引用效率很低。但遗憾的是,这是无法避免的。程序员能做的是使用或保存另一个对象的子对象(Text1)。

with frmmain.text1
一起使用。text = "learnvb"
。对齐= 0
。tag = "这是我的生活"
。backcolor = vbblack
。forecolor = VB white
end with
或将子对象与另一个对象一起保存
dimtxttextbox as textbox
Set txtTextBox = frmMain。Text1
TxtTextBox。Text = "Learn VB"
TxtTextBox。Alignment = 0
TxtTextBox。tag = " Its my life "
tx textbox . back color = VB black
txttextbox . forecolor = VB white
注意,上面提到的方法只有在需要对一个对象的子对象进行操作时才适用,下面的代码是不正确的:
with text1
。text = "learnvb"
。对齐= 0
。tag = "这是我的生活"
。backcolor = vbblack
。forecolor = VB white
end with
遗憾的是,我们在实际代码中经常可以找到类似上面的代码。这样做只会降低代码的执行速度。原因是With block在编译后会形成一个分支,会增加额外的处理工作。

8.检查字符串是否为空
大多数程序员在检查字符串是否为空:if text 1 . text = " " Then
执行运算
End if
非常因此,建议您使用以下方法:
iflen(text 1 . text)= 0 Then
执行运算
End if。

9.去掉Next关键字后的变量名
在Next关键字后添加变量名会导致代码效率降低。我不知道为什么会这样。只是一种体验。但是,我觉得很少有程序员会这样画蛇添足。毕竟大部分程序员都是惜字如金的人。
iCount = 1到10的错误代码

执行操作
下一个iCount
更正iCount = 1到10的代码

执行操作
下一个。

10.使用数组代替多个变量
当您有多个保存相似数据的变量时,请考虑用数组替换它们。在VB中,数组是有效的数据结构之一。

1.用动态数组代替静态数组
使用动态数组对代码的执行速度不会有太大影响,但在某些情况下可以节省大量资源。

12.销毁对象
无论写什么软件,程序员都需要考虑在用户决定终止软件后,释放软件所占用的内存空。但遗憾的是,很多程序员似乎并不太在意这一点。正确的做法是在退出程序之前销毁程序中使用的对象。示例:
dimfso as new file system object
执行操作
销毁对象
Set FSO = Nothing
对于窗体,可以卸载:
Unload frmMain

13.变长串和定长串
从技术上来说,定长串比变长串需要更少的处理时间和空。但定长字符串的缺点是,很多情况下需要调用Trim函数去掉字符串末尾的空字符,这样反而会降低代码效率。所以除非字符串的长度不变,否则仍然使用变长字符串。

14.使用类模块代替ActiveX控件
除非ActiveX控件涉及用户界面,否则尽量使用类等轻量级对象。两者效率相差很大。

15.使用内部对象
说到使用ActiveX控件和dll,许多程序员喜欢在加入项目之前编译它们。建议你不要这样做,因为从VB连接一个外部对象需要很大的CPU处理能力。每当你调用一个方法或者访问一个属性的时候,都会浪费大量的系统资源。如果您有ActiveX控件或dll的源代码,请将它们用作项目的私有对象。

16.减少模块数量
有些人喜欢将通用函数保留在模块中。我同意这一点。但是一个模块只写二三十行代码就很可笑了。如果你真的不需要这个模块,尽量不要使用它。这样做的原因是,只有当模块中的函数或变量被调用时,VB才会将模块加载到内存中;当VB应用程序退出时,这些模块将从内存中卸载。如果代码中只有一个模块,VB只加载一次,这样代码的效率会提高;相反,如果代码中有多个模块,VB会进行多次加载操作,代码的效率会降低。

17.使用对象数组
在设计用户界面时,程序员应该尝试对相同类型的控件使用对象数组。你可以做一个实验:在窗口上添加100个图片框,每个图片框都有不同的名字,运行程序。然后创建一个新项目,并添加100 PictureBox到窗口。但是,这一次,使用对象数组并运行程序,您可以注意到两个程序的加载时间的差异。

18.使用Move方法
有些程序员在改变对象的位置时喜欢使用Width、Height、Top和Left属性。比如:
image1 . width = 100
Image1 . height = 100
Image1 . top = 0
Image1 . left = 0
其实这样效率很低,因为程序修改了四个属性,每次修改后正确的做法是使用Move方法:
Image1。移动0,0,100,100

19.减少图片的使用
图片会占用大量内存,处理图片也占用大量CPU资源。在软件中,如果可能的话,可以考虑将图片替换成背景色——当然,这只是从技术角度来说。

20.使用ActiveX DLL而不是ActiveX control
如果您设计的ActiveX对象不涉及用户界面,请使用ActiveX DLL。

编译优化

我遇到的很多VB程序员都没有使用过编译选项,也没有试图弄清楚其中的区别。我们来看看每个选项的具体含义。

1.P代码(伪代码)和本机代码
你可以选择把软件编译成P代码或者本机代码。默认选项是本机代码。什么是P码和原生码?
P- code:在VB中执行代码时,VB首先将代码编译成P- code,然后解释并执行编译后的P- code。在编译环境中,使用此代码比使用本机代码更快。当选择P代码时,VB在编译时将伪代码放入EXE文件中。
原生代码:原生代码是VB6之后引入的一个选项。编译成EXE文件时,原生代码的执行速度比P代码快。选择本机代码后,VB在编译时使用机器指令生成EXE文件。
用原生代码编译时,我发现有时候会引入一些莫名其妙的错误。在编译环境下,我的代码完全正确地执行了,但是用原生代码选项生成的EXE文件却无法正确执行。通常这发生在卸载窗口或弹出打印窗口时。我通过在代码中添加DoEvent语句解决了这个问题。当然,这种情况发生的概率非常小。可能有些VB程序员没遇到过,但确实存在。
原生代码还有其他几个选项:
a)代码速度优化:这个选项可以编译更快的可执行文件,但是可执行文件更大。推荐
b)代码大小优化:该选项可以编译一个相对较小的可执行文件,但不建议以牺牲速度为代价。
c)无优化:该选项仅将P代码转换为本机代码,不进行任何优化。可以在调试代码时使用。
d)针对奔腾Pro的优化:虽然这一项不是本机代码中的默认选项,但我通常会使用这个选项。此选项编译的可执行程序在奔腾Pro和奔腾2机器上运行速度更快,但在旧机器上运行速度稍慢。考虑到奔腾2现在已经过时了,我们推荐你使用这个选项。
e)生成符号调试信息:此项在编译过程中生成一些调试信息,以便用户使用类似Visual C++的工具对编译后的代码进行调试。使用此选项将生成一个. pdf文件,该文件在可执行文件中记录徽标信息。当程序有API函数或DLL调用时,此选项很有用。

2.高级优化
高级优化中的设置可以帮助你提高软件的速度,但是有时候也会引入一些错误,所以建议你尽量谨慎使用。如果代码中有很大的循环或者复杂的数学运算,在高级优化中选择一些项,会大大提高代码的性能。如果使用高级优化功能,建议你严格测试编译后的文件。
a)假设没有别名:可以提高循环体中代码的执行效率,但是如果通过变量的引用改变变量的值,比如调用一个方法,把变量的引用作为方法的参数,在方法中改变变量的值,就会产生错误。返回的结果可能只是一个错误,也可能是导致程序停止运行的严重错误。
b)取消数组绑定检查、整数溢出检查和浮点错误检查:程序运行时,如果通过这些检查发现错误,错误处理代码会进行处理。但是,如果取消这些检查,如果出现错误,程序将无法处理它。只有当您确定代码中不会出现上述错误时,才能使用这些选项。它们将大大提高软件的性能。
c)允许不舍入的浮点运算:选择该选项可以使编译后的程序处理浮点运算的速度更快。它的缺点是在比较两个浮点数时可能会导致不正确的结果。
d)取消奔腾FDIV的安全检查:这个选项是为一些老的奔腾芯片设置的,现在看来已经过时了。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 全国计算机等级考试二级:如何编写高质量的VB代码

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情