编程人员从大量的程序开发中积累了许多非常实用的经验与技巧,它们就象一盘盘的快餐,看似简单但营养绝对丰富!用“餐”之后,您的VB程序将立即超频。还犹豫什么,快来品尝品尝吧 ...
用Mid$命令超速字符串添加操作
从头开始删除集合项目
用InStr函数实现代码减肥
精用Boolean表达式,让代码再减肥
函数名巧做局部变量
火眼识破隐藏的Variant变量
GoSub在编译程序中速度变慢
减少DoEvents语句的数量
And、Or和Xor:让我们来优化表达式
静态变量慢于动态变量
善用"Assume No Aliasing"编译选项
为常量定义合适的类型
你真正理解"Allow Unrounded Floating Point Operations"选项的含义吗?
除法运算符"\"与"/"的区别
使用"$-类型"字符串函数会更快
妙用Replace函数替代字符串连接操作符&
固定长度字符串数组:赋值快,释放快!
未公开的返回数组型函数加速秘诀
深入使用LIKE操作符
创建任意长度重复字符串的简洁方法
另辟蹊径处理字符串中的字符:字节数组法
快速清除数组部分内容
快速初始化Variant和String类型数组
访问简单变量总是快于数组元素值
创建新表时,快速拷贝字段
无闪烁地快速附加字符串到textbox控件
快速找到选中的OptionButton
表单及控件的引用阻止了表单的卸载
重定义编译DLL文件的基地址
快速调入TreeView控件以及ListView控件的子项内容
Friend过程快于Public过程
使用Objptr函数快速查找集合中的对象
使用ObjPtr检测2个对象变量是否指向同一对象
读取文件内容的简洁方法
字体对象克隆招法
用Mid$命令超速字符串添加操作
大家都知道,&操作符的执行速度是相当慢的,特别是处理长字符串时。当必须重复地在同一变量上附加字符时,有一个基于Mid$命令的技巧可以使用。基本思路就是:预留一个足够长的空间存放操作的结果。下面是应用这个技术的一个例子。
假设要建立一个字符串,它要附加从1开始的10000个整数:"1 2 3 4 5 6 7 ... 9999
10000"。下面是最简单的实现代码:
res = ""
For i = 1 to 10000: res = res & Str(i): Next
<>
face=宋体>代码虽然简单,但问题也很明显:Res变量将被重分配10000次。下面的代码实现同样的目的,但效果明显好转:
Dim res As String
Dim i As Long
Dim index As Long
’预留足够长的缓冲空间
res = Space(90000)
’指针变量,指出在哪里插入字符串
index = 1
’循环开始
For i = 1 to 10000
substr = Str(i)
length = Len(substr)
’填充字符串的相应区间段数值
Mid$(res, index, length) = substr
’调整指针变量
index = index length
Next
’删除多余字符
res = Left$(res, index - 1)
测试表明:在一个333MHz的计算机上,前段代码执行时间为2.2秒,后者仅仅为0.08秒!代码虽然长了些,可是速度却提高了25倍之多。呵呵,由此看来:代码也不可貌相啊
?
提高运行速度(二)
从头开始删除集合项目
删除集合中的所有内容有许多方法,其中有些非常得迅速。来看看一个包含10,000个项目的集合:
Dim col As New Collection, i As Long
For i = 1 To 10000
col.Add i, CStr(i)
Next
可以从末尾位置为起点删除集合内容,如下:
For i = col.Count To 1 Step -1
col.Remove i
Next
也可以从开始位置为起点删除集合内容,如下:
For i = 1 To col.Count Step 1
col.Remove i
Next
<>
face=宋体>试验证明,后者要快于前者百倍多,比如0.06秒比4.1秒。原因在于:当引用接近末尾位置的集合项目时,VB必须要从第1个项目开始遍历整个的项目链。 <>
face=宋体>更有趣的是,如果集合项目的数量加倍,那么从末尾开始删除与从头开始删除,前者要比后者花费的时间将成倍增长,比如前者是24秒,后者可能为0.12秒这么短!
最后提醒您:删除集合的所有内容的最快方法就是“毁灭”它,使用下面的语句: Set col = New Collection
对于一个包含20,000个项目的集合,上述操作仅仅耗时0.05秒,这比使用最快的循环操作进行删除也要快2倍左右。