那么 使用错误捕获是否会影响速度呢?
是的,使用错误处理将会降低一些性能,在。Net 中,使用 Try Catch 也将会影响性能,所以我们使用Reflector 反编译微软的类库时,会发现他的子过程很少使用 Try 来捕获错误,基本都是采用可预知的方式来判断可能出现的错误,并做相应处理。
实际上,使用错误捕获后,编译后的代码实际上做了很多不为我们所知的操作,虽然 使用错误捕获从一定程度上方便了编码过程,却牺牲了一定的速度,有利有弊,所以我们应该正确的使用 错误捕获。
测试的VB6代码
Option Explicit
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim m_FldsName() As String
Private Sub Command1_Click()
Dim II As Long
Dim t As Single
cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=广商;Data Source=SUPER"
rs.Open "Select * from FldSet ", cn, adOpenKeyset
Do Until rs.EOF = True
rs.MoveNext
Loop
rs.MoveFirst
t = Timer
ReDim m_FldsName(rs.Fields.Count)
For II = 0 To rs.Fields.Count - 1
m_FldsName(II) = rs.Fields(II).Name
Next
Do Until rs.EOF = True
ReadFieldsNotOnErr "Err1"
ReadFieldsNotOnErr "TableName"
ReadFieldsNotOnErr "Err2"
rs.MoveNext
Loop
MsgBox "NotErr:" & Timer - t
On Error Resume Next
rs.MoveFirst
t = Timer
Do Until rs.EOF = True
ReadFieldsOnErr "Err1"
ReadFieldsOnErr "TableName"
ReadFieldsOnErr "Err2"
rs.MoveNext
Loop
MsgBox "OnErr:" & Timer - t
rs.Close
cn.Close
End Sub
Private Sub ReadFieldsOnErr(FieldName As String)
Dim v As Variant
v = rs(FieldName).Value
End Sub
Private Sub ReadFieldsNotOnErr(FieldName As String)
Dim II As Long
Dim IsExists As Boolean
Dim v As Variant
IsExists = False
For II = 0 To UBound(m_FldsName) - 1
If m_FldsName(II) = FieldName Then
IsExists = True
Exit For
End If
Next
If IsExists = True Then
v = rs(FieldName).Value
End If
End Sub
===================================
测试结果:
无错误时
ReadFieldsOnErr : 0。46
ReadFieldsNotOnErr : 0。47
有错误时
ReadFieldsOnErr : 0.96
ReadFieldsNotOnErr : 0.47
可以看到:不使用错误处理,速度相当稳定,而使用错误处理时,有错误的情况下速度落差较大。所以 对于在循环中 频繁调用 的子过程,建议对可能出现的错误进行预处理,减少使用 On error来提升速度。
【VB6中使用错误处理对程序速度的影响】相关文章:
2025年外省高中学业水平合格性考试成绩转入江苏认定的通告公布03-23
Vb中控件的自动排列03-23
写未来的作文300字03-23
Our Mother Is the Same 我们的妈妈是一样的03-23
中国大地保险公司实习报告03-23
小学父爱的作文600字03-23
07年4月北师大“中国古代文学史(一)”串讲(5)03-23
汪涵讲述小时候成长经历:鸡毛掸子的故事03-23
2023年广东梅州中考成绩查询时间及查分入口[7月7日起]03-23
关于清明节的英语作文:清明节03-23
儿童舞蹈教程:国标新手上路03-23
