电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

VB 中使用错误处理对于速度的影响


发布日期:2023/1/30
 

在 VB我们使用 On Error 来捕获和处理错误而且经常使用 On Error Resume Next 来可能产生的忽略错误

那么 使用错误捕获是否会影响速度呢?

是的使用错误处理将会降低一些性能Net 中使用 Try Catch 也将会影响性能所以我们使用

Reflector 反编译微软的类库时会发现他的子过程很少使用 Try 来捕获错误基本都是采用可预知的方式来判断可能出现的错误并做相应处理

实际上使用错误捕获后编译后的代码实际上做了很多不为我们所知的操作虽然 使用错误捕获从一定程度上方便了编码过程却牺牲了一定的速度有利有弊所以我们应该正确的使用 错误捕获

测试的VB代码

Option Explicit

Dim cn As New ADODBConnection

Dim rs As New ADODBRecordset

Dim m_FldsName() As String

Private Sub Command_Click()

Dim II As Long

Dim t As Single

cnOpen Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Initial Catalog=广商;Data Source=SUPER

rsOpen Select * from FldSet cn adOpenKeyset

Do Until rsEOF = True

rsMoveNext

Loop

rsMoveFirst

t = Timer

ReDim m_FldsName(rsFieldsCount)

For II = To rsFieldsCount

m_FldsName(II) = rsFields(II)Name

Next

Do Until rsEOF = True

ReadFieldsNotOnErr Err

ReadFieldsNotOnErr TableName

ReadFieldsNotOnErr Err

rsMoveNext

Loop

MsgBox NotErr: & Timer t

On Error Resume Next

rsMoveFirst

t = Timer

Do Until rsEOF = True

ReadFieldsOnErr Err

ReadFieldsOnErr TableName

ReadFieldsOnErr Err

rsMoveNext

Loop

MsgBox OnErr: & Timer t

rsClose

cnClose

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 = To UBound(m_FldsName)

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

ReadFieldsNotOnErr

有错误时

ReadFieldsOnErr

ReadFieldsNotOnErr

可以看到不使用错误处理速度相当稳定而使用错误处理时有错误的情况下速度落差较大

所以 对于在循环中 频繁调用 的子过程建议对可能出现的错误进行预处理减少使用 On error

来提升速度

上一篇:dotnet 下开发 COM+ 组件

下一篇:一起学WCF--wcf初识