那么 使用错误捕获是否会影响速度呢?
是的,使用错误处理将会降低一些性能,在。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来提升速度。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/
领测软件测试网最新更新
关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073