熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

VB 中使用錯誤處理對於速度的影響

2022-06-13   來源: ASP編程 

  在 VB我們使用 On Error 來捕獲和處理錯誤而且經常使用 On Error Resume Next 來可能產生的忽略錯誤

  那麼 使用錯誤捕獲是否會影響速度呢?

  是的使用錯誤處理將會降低一些性能Net 中使用 Try Catch 也將會影響性能所以我們使用

  Reflector 反編譯微軟的類庫時會發現他的子過程很少使用 Try 來捕獲錯誤基本都是采用可預知的方式來判斷可能出現的錯誤並做相應處理

  實際上使用錯誤捕獲後編譯後的代碼實際上做了很多不為我們所知的操作雖然 使用錯誤捕獲從一定程度上方便了編碼過程卻犧牲了一定的速度有利有弊所以我們應該正確的使用 錯誤捕獲

  測試的VB代碼

  Option Explicit

  Dim cn As New ADODBConnection

  Dim rs As New ADODBRecordset

  Dim m_FldsName() As String

  Private Sub Command_Click()

  Dim II As Long

  Dim t As Single

  cnOpen Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Initial Catalog=廣商;Data Source=SUPER

  rsOpen Select * from FldSet cn adOpenKeyset

  Do Until rsEOF = True

  rsMoveNext

  Loop

  rsMoveFirst

  t = Timer

  ReDim m_FldsName(rsFieldsCount)

  For II = To rsFieldsCount

  m_FldsName(II) = rsFields(II)Name

  Next

  Do Until rsEOF = True

  ReadFieldsNotOnErr Err

  ReadFieldsNotOnErr TableName

  ReadFieldsNotOnErr Err

  rsMoveNext

  Loop

  MsgBox NotErr: & Timer t

  On Error Resume Next

  rsMoveFirst

  t = Timer

  Do Until rsEOF = True

  ReadFieldsOnErr Err

  ReadFieldsOnErr TableName

  ReadFieldsOnErr Err

  rsMoveNext

  Loop

  MsgBox OnErr: & Timer t

  rsClose

  cnClose

  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 = To UBound(m_FldsName)

  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  

  ReadFieldsNotOnErr

  有錯誤時

  ReadFieldsOnErr  

  ReadFieldsNotOnErr

  可以看到不使用錯誤處理速度相當穩定而使用錯誤處理時有錯誤的情況下速度落差較大

  所以 對於在循環中 頻繁調用 的子過程建議對可能出現的錯誤進行預處理減少使用 On error

  來提升速度


From:http://tw.wingwit.com/Article/program/ASP/201311/21753.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.