VB6中使用的错误处理

来源:岁月联盟 编辑:zhu 时间:2007-02-01
  那么 使用错误捕获是否会影响速度呢?

  是的,使用错误处理将会降低一些性能,在。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来提升速度。


推荐文章:搞笑之可爱水果表情  清新素洁水仙壁纸集