VB6中使用错误处理对程序速度的影响

VB6中使用错误处理对程序速度的影响,第1张

VB6中使用错误处理对程序速度的影响,第2张

在VB6中,我们使用On Error来捕获和处理错误,并经常使用On Error Resume Next来忽略可能的错误。

那么使用错误捕获会影响速度吗?

是的,使用错误处理会降低一些性能。Net中,Try Catch的使用也会影响性能,所以当我们用Reflector反编译微软的类库时,会发现它的子进程很少使用Try Catch错误,基本都是采用可预测的方式来判断可能的错误并进行相应的处理。

实际上,使用错误捕获后,编译后的代码实际上做了很多未知的操作。虽然使用错误捕获在一定程度上方便了编码过程,但是牺牲了一定的速度,有利有弊,所以要正确使用错误捕获。

测试VB6的代码。

选项显式

Dim cn作为新ADODB。连接
Dim rs As New ADODB。记录集
Dim m_FldsName()为字符串

私有子命令1_Click()

Dim II As Long
Dim t As Single

cn。Open " Provider = SQLOLEDB.1Persist安全信息= False用户ID = sa初始目录=宽商;数据源= SUPER " "/br/]RS。打开“Select * from FldSet”,cn,adOpenKeyset

做直到rs。EOF = True
rs。MoveNext
循环

rs。MoveFirst
t =计时器

ReDim m_FldsName(rs。Fields.Count)
用于II = 0至rs。field s . Count-1
m _ flds name(II)= RS。字段(二)。下一个名字

做直到rs。EOF = True
ReadFieldsNotOnErr " err 1 "
ReadFieldsNotOnErr " TableName "
ReadFieldsNotOnErr " err 2 "

rs。MoveNext
Loop
MsgBox " NotErr:" & Timer-t

出错时继续下一个
rs。MoveFirst
t = Timer
Do Until RS。EOF = True
ReadFieldsOnErr " err 1 "
ReadFieldsOnErr " TableName "
ReadFieldsOnErr " err 2 "
RS。MoveNext
Loop
MsgBox " OnErr:" & Timer-t

rs。关闭
cn。关闭

末端接头

private Sub ReadFieldsOnErr(field name As String)
Dim v As Variant
v = RS(field name)。值
结束Sub

private Sub ReadFieldsNotOnErr(field name As String)
Dim II Long
Dim is exists As Boolean
Dim v As Variant
is exists = False

For II = 0 To UBound(m _ flds name)-1
If m _ flds name(II)= field name Then
is exists = True
Exit For
End If
Next

如果IsExists = True,则
v = rs(FieldName)。值
End If
End Sub

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

测试结果:

无误差时间

ReadFieldsOnErr : 0 .46

ReadFieldsNotOnErr : 0 .47

当出现错误时

读取字段错误:0.96

读取字段数错误率:0.47

可以看到,没有错误处理的时候速度相当稳定,但是使用错误处理的时候,有错误的时候速度下降很大。因此,对于循环中频繁调用的子流程,建议对可能出现的错误进行预处理,减少On error的使用以加快速度。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VB6中使用错误处理对程序速度的影响

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情