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

2016-01-29 13:31 10 1 收藏

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

【 tulaoshi.com - ASP.NET 】

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

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

来提升速度

来源:http://www.tulaoshi.com/n/20160129/1490459.html

延伸阅读
标签: ASP
  随便贴贴,学过VB的人都应该知道的,不好意思。 '********************************************************************************************** '                 MTS VB6 COM Component Template - by Michael Gonzalez '**************...
窗体的Initialize事件------窗体的Load事件------窗体的Activate事件------窗体的QueryUnload事件------窗体的Unload事件 可以新建一个VB窗体,在窗体中写下面代码测试: Private Sub Form_Activate() MsgBox "窗体的Activate事件" End Sub Private Sub Form_Initialize() MsgBox "窗体的Initialize事件" End Sub Private Sub Form_Load() ...
标签: Web开发
当前web技术中最热门的词语是什么?是AJAX。AJAX框架组件的核心是XMLHttpRequest JavaScript对象,它允许客户端开发人员在不中断用户操作、不利用隐藏页面的情况下,通过HTTP发送和接收XML文档。 现在,有些人可能会感到恐惧,因为它突然允许那些可能过多地使用了验证窗体和动画图像的客户端开发人员负责传递XML文档和处理HTTP头信息...
imgedit imgadmin tiff koda vb6 @echo 请先插入windows 2000的安装光盘 @pause @d: @cd \i386 @expand IMGADMIN.OC_ c:\Windows\System32\IMGADMIN.OCX @expand IMGCMN.DL_ c:\Windows\System32\IMGCMN.DLL @expand IMGEDIT.OC_ c:\Windows\System32\IMGEDIT.OCX @expand IMGSCAN.OC_ c:\Windows\System32\IMGSCAN.OCX @expand IMGSHL.DL_ c:\...
    前几天因工作需要, 要从一个Oracle数据库到另一台Oralce数据库之间建立一个DB Link,用于将一服务器的数据Insert到另外一台机器中。      Oracle服务器A:Sid:SDH, USERID/PW:  NM/NM      Oracle服务器B: Sid;gsgx,  USERID/PW:  gs/gs   &nb...

经验教程

650

收藏

16
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部