首页  ·  知识 ·  编程语言
VB中使用错误处理对于速度的影响
网友  中国IT实验室   VB  编辑:德仔   图片来源:网络
在 VB6 中,我们使用 On Error 来捕获和处理错误,而且经常使用 On Error Resume Next 来可能产生的忽略错误。   那么
在 VB6 中,我们使用 On Error 来捕获和处理错误,而且经常使用 On Error Resume Next 来可能产生的忽略错误。
  那么 使用错误捕获是否会影响速度呢?
  是的,使用错误处理将会降低一些性能,在。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
  来提升速度
 
本文作者:网友 来源:中国IT实验室
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读