什么是一个高效的软件
作者:OpenWorld
时间:2026-06-29
来源:互联网
浏览:0
高效软件需在同等功能下运行更快且占用更少系统资源。VB代码优化核心包括:优先使用整数或长整数替代浮点类型,避免变体与反复读取属性,用数组替代集合,展开小循环体,减少对象引用层次,善用With或对象变量,并注意及时销毁对象以释放内存。编译时推荐本机代码并选择代码速度优化。
什么才称得上是一个高效的软件?核心标准其实很简单:它在完成同样功能的前提下,不仅要跑得更快,还得吃更少的系统资源。这篇文章里,我整理了一些在VB开发过程中积累下来的实战经验,打算用一些简短的例子,给你展示一下怎么写出更高效的VB代码。其中包含了不少可能会对VB开发者有实际帮助的技术细节。在展开具体讨论之前,有几个核心理念值得先摆出来。
**让代码一次成型:** 我见过不少程序员,习惯先把功能代码“堆”出来,然后再回头琢磨怎么优化。结果往往是,为了达到优化目标,几乎得把代码推倒重写一遍。所以,我的建议是:在写代码之前,就把优化这件事儿放进你的设计蓝图里。
**把握好优化的ROI:** 通常写完一段代码后,需要检查和打磨。在这个过程中,你可能会发现某个循环里的代码效率还能再提一提。这时候,很多追求完美的程序员可能会立刻动手改。我的建议是:如果修改这段代码能让程序运行快个一秒,那值得做;但如果只能提升10毫秒,那就别动它了。原因很简单——重写代码大概率会引入新bug,而调试新代码同样需要时间。程序员需要在软件性能和开发投入之间找到一个平衡点。而且说实话,10毫秒的差异,用户是根本感受不到的。
**该用面向对象的时候,别犹豫:** VB提供的机制虽然不完全支持纯正的面向对象设计和编码,但它提供了简单的类。很多人觉得使用对象会拖慢代码效率。对于这一点,其实可以换个角度来看:衡量代码效率不能只盯着运行速度,软件占用的资源也是一个重要指标。使用类,有时候反而能在整体上提升软件的性能表现,这一点在后面会用具体例子来说明。
当你开始写VB代码时,可以把上面几点当作指导原则。我把整篇文章分成了两个部分:一部分讲如何提升代码的运行速度,另一部分聊编译优化。
本文内容来源于互联网,如有侵权请联系删除。
如何提高代码的运行速度
下面这些方法,可以说是经过大量实践验证的“提速利器”。1. 使用整数(Integer)和长整数(Long)
提高代码运行速度最简单的方法,可能就藏在你选择的数据类型里。别小看这个选择,正确的数据类型能让性能提升一大截。在大多数情况下,完全可以把Single、Double和Currency类型的变量换成Integer或Long,因为VB处理后者的效率要远远高于前者。 你可能会问,用Single或Double是因为它们能保存小数。但小数也可以“存”在Integer里。比如,如果程序里约定保留三位小数,那么把数值保存在Integer变量中,需要时除以1000就行了。经验表明,用Integer和Long替换Single、Double和Currency后,代码的运行速度能提升将近10倍。2. 避免使用变体
对于VB程序员来说,这应该是个常识了。变体类型的变量需要16个字节来保存数据,而一个整数只需要2个字节。很多人用变体是为了省事、减少设计工作量。但只要你严格设计和规范编码,完全可以避开它。 这里顺带提一句,Object对象也存在同样的问题。看下面这段代码: ``` Dim FSO Set FSO = New Scripting.FileSystemObject ``` 或者: ``` Dim FSO as object Set FSO = New Scripting.FileSystemObject ``` 这两段代码在声明时没有指定具体数据类型,赋值时会浪费内存和CPU时间。正确的写法应该是: ``` Dim FSO as New FileSystemObject ```3. 尽量避免使用属性
在日常的代码里,最常见的低效行为就是:明明可以用变量,偏偏反复去读属性,尤其是在循环里。要知道,存取变量的速度可是存取属性的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. 展开小的循环体
有时候,你会遇到一个循环体只循环两三次,而且里面的代码也很少。这种情况下,完全可以把循环展开。因为循环本身会占用额外的CPU时间。当然,如果循环比较复杂,就没必要这么干了。6. 避免使用很短的函数
这和展开小循环体是同一个道理。调用一个只有几行代码的函数,有时候调用函数花费的时间反而比执行函数本身还要长。这种情况下,直接把函数里的代码拷贝到调用它的地方会更高效。7. 减少对子对象的引用
在VB里,用“.”来实现对象的引用。比如 `Form1.Text1.Text`,这行代码引用了两个对象:Form1和Text1。这种引用方式效率很低,但又没法完全避免。唯一能做的,就是用`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 ' 执行操作 End if ``` 实际上,字符串比较需要的处理量比读取属性还大。所以,建议用下面的方法: ``` If Len(Text1.Text) = 0 then ' 执行操作 End if ```9. 去除Next关键字后的变量名
在`Next`后面加上变量名,会让代码效率下降。具体原因说不上来,但这是一个从实践中得出的经验。不过话说回来,大多数程序员都是惜字如金的,这种画蛇添足的做法并不多见。 **错误的代码:** ``` For iCount = 1 to 10 ' 执行操作 Next iCount ``` **正确的代码:** ``` For iCount = 1 to 10 ' 执行操作 Next ```10. 使用数组,而不是多个变量
如果有一组保存类似数据的变量,不妨考虑把它们放进一个数组。在VB里,数组是最高效的数据结构之一。11. 使用动态数组,而不是静态数组
使用动态数组对代码执行速度影响不大,但在某些情况下,它能帮你节省大量资源。12. 销毁对象
无论写什么软件,都需要考虑在用户决定终止运行后,释放软件占用的内存空间。遗憾的是,很多程序员对这一点并不在意。正确的做法是:退出程序前,销毁程序里用过的对象。比如: ``` Dim FSO as New FileSystemObject ' 执行操作 ' 销毁对象 Set FSO = Nothing ``` 对于窗体,可以进行卸载: ``` Unload frmMain ``` 或者: ``` Set frmMain = Nothing ```13. 变长和定长字符串
从技术上来看,定长字符串需要更少的处理时间和空间。但它的缺点也很明显:很多情况下,你都得调用`Trim`函数来去掉末尾的空格,这反而降低了效率。所以,除非字符串的长度是固定的,否则还是用变长字符串吧。14. 使用类模块,而不是ActiveX控件
除非ActiveX控件涉及用户界面,否则尽量用轻量的对象,比如类。两者之间的效率差距不小。15. 使用内部对象
很多程序员喜欢把ActiveX控件和DLL编译好后,再加入到工程中。我的建议是:最好别这么干。因为从VB连接到一个外部对象会耗费大量CPU处理能力。每调用一次方法或存取一次属性,都会造成系统资源浪费。如果你有ActiveX控件或DLL的源代码,优先把它们作为工程的私有对象。16. 减少模块的数量
有些人喜欢把通用函数保存到模块里,这没问题。但如果一个模块里只有二三十行代码,就有点可笑了。如果你不是特别需要,尽量少用模块。原因在于,只有当模块中的函数或变量被调用时,VB才把它加载到内存;退出时才会卸载。如果代码里只有一个模块,VB就只做一次加载;模块越多,加载次数越多,效率自然就低了。17. 使用对象数组
设计用户界面时,对于相同类型的控件,尽量使用对象数组。你可以做个实验:在一个窗口上放100个PictureBox,每个名字都不同,然后运行程序。再新建一个工程,同样放100个PictureBox,但这次用一个对象数组。你很快就能发现两个程序加载时间上的差异。18. 使用Move方法
改变对象位置时,有些程序员喜欢分别修改Width、Height、Top和Left属性。比如: ``` Image1.Width = 100 Image1.Height = 100 Image1.Top = 0 Image1.Left = 0 ``` 这么做效率很低,因为程序修改了四个属性,每次修改后窗口都会被重绘。正确的做法是使用`Move`方法: ``` Image1.Move 0, 0, 100, 100 ```19. 减少图片的使用
图片会占用大量内存,处理图片也需要不少CPU资源。在软件里,如果条件允许,可以考虑用背景色来替代图片——当然,这只是从技术角度出发的建议。20. 使用ActiveX DLL,而不是ActiveX控件
如果你设计的ActiveX对象不涉及用户界面,那么用ActiveX DLL。编译优化
我见过不少VB程序员,从来没碰过编译选项,也不清楚各个选项之间的差异。下面我们来逐一看看。1. P-代码(伪代码)和本机代码
你可以选择把软件编译为P-代码或本机代码。缺省选项是本机代码。 **P-代码:** 在VB中执行代码时,系统会先把代码编译成P-代码,然后再解释执行。在编译环境下,它的执行速度比本机代码快。选择P-代码后,编译时VB会把伪代码放进一个EXE文件里。 **本机代码:** 这是VB6以后才推出的选项。编译成EXE文件后,本机代码的执行速度比P-代码快。选择本机代码后,编译时VB直接使用机器指令生成EXE文件。 在使用本机代码编译时,我发现有时候会遇到一些莫名其妙的问题。在编译环境里,代码完全正确,但用本机代码选项生成的EXE文件却执行出错。这种情况通常发生在卸载窗口或弹出打印窗口时。我在代码里加了一句`DoEvent`语句,就解决了。当然,出现这种问题的概率非常低,很多VB程序员可能从来没遇到过,但它确实存在。 本机代码里还有几个选项: a) **代码速度优化:** 可以编译出速度较快的执行文件,但文件体积比较大。推荐使用。 b) **代码大小优化:** 可以编译出比较小的执行文件,但以牺牲速度为代价。不推荐。 c) **无优化:** 只是把P-代码转化成机器代码,没有任何优化。调试代码时可以用。 d) **针对Pentium Pro优化:** 虽然不是缺省选项,但个人习惯上会选它。它编译出的可执行文件在Pentium Pro和Pentium 2以上的机器上跑得更快,老机器上会稍慢一点。考虑到现在连Pentium 2都算古董了,推荐大家使用。 e) **产生符号化调试信息:** 编译时会生成一些调试信息,方便用Visual C++这类工具去调试编译好的代码。会生成一个.pdf文件,记录可执行文件中的标志信息。当程序涉及API函数或DLL调用时,这个选项挺有帮助。2. 高级优化
高级优化里的设置能帮你进一步提升软件速度,但也可能引入一些错误,所以用起来一定要小心。如果代码里有比较大的循环体或复杂的数学运算,选中某些高级优化项会大幅提升性能。一旦使用了高级优化功能,强烈建议对编译好的文件做严格的测试。 a) **假定无别名:** 可以提高循环体里代码的执行效率。但如果通过变量的引用改变了变量值,比如调用一个方法,把变量引用作为参数传进去,在方法里又改变了变量的值,那就会引发错误。轻则结果不对,重则程序直接中断。 b) **取消数组绑定检查、取消整数溢出检查和取消浮点错误检查:** 运行时如果通过这些检查发现了错误,错误处理代码会兜底。但取消了这些检查,错误就没人管了。只有当你能百分之百确定代码不会出现这些错误时,才可以使用。这些选项能让性能提升一大截。 c) **允许不舍入的浮点操作:** 可以让编译出来的程序更快地处理浮点运算。唯一的缺点在于,比较两个浮点数时,可能会导致不正确的结果。 d) **取消Pentium FDIV安全检查:** 这个选项是针对一些老Pentium芯片设计的,现在已经没啥用了。
作者最新文章
三星 Galaxy A08 渲染图曝光:Helio G99 芯片与 6000mAh 电池配置解析
2026-09-08 17:14
OPPO Find X10 Pro Max 影像规格详解:三颗2亿像素镜头与全焦段8K视频能力
2026-09-08 16:41
PDF转HTML在线转换器怎么选?转换后网页排版怎么查?
2026-09-04 11:02
AE教程书籍挑选指南:零基础、动效与合成方向实战标准
2026-09-02 13:31
教程书籍使用SAI软件Logo要单独授权吗:商标引用与出版合规要点
2026-09-02 11:50
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















