• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    VB6中使用錯誤處理對程序速度的影響

    發布: 2007-5-25 09:19 | 作者: zlt982001 | 來源: 天極網 | 查看: 30次 | 進入軟件測試論壇討論

    領測軟件測試網   在 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來提升速度。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>