溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

VB.NET的錯(cuò)誤處理是否影響運(yùn)行速度

發(fā)布時(shí)間:2021-10-27 17:50:30 來(lái)源:億速云 閱讀:88 作者:柒染 欄目:編程語(yǔ)言

VB.NET的錯(cuò)誤處理是否影響運(yùn)行速度,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

運(yùn)用任何一個(gè)語(yǔ)言進(jìn)行程序開發(fā)時(shí),通常都會(huì)對(duì)程序開發(fā)中必然會(huì)出現(xiàn)的錯(cuò)誤進(jìn)行相應(yīng)的處理。那么在VB.NET中,VB.NET錯(cuò)誤處理往往會(huì)對(duì)運(yùn)行速度有一定的影響。VB.NET中On Error 來(lái)捕獲和處理錯(cuò)誤,而且經(jīng)常使用 On Error Resume Next 來(lái)可能產(chǎn)生的忽略錯(cuò)誤。

那么 使用錯(cuò)誤捕獲是否會(huì)影響速度呢?

是的,使用VB.NET錯(cuò)誤處理將會(huì)降低一些性能,在。Net 中,使用 Try Catch 也將會(huì)影響性能,所以我們使用Reflector 反編譯微軟的類庫(kù)時(shí),會(huì)發(fā)現(xiàn)他的子過(guò)程很少使用 Try 來(lái)捕獲錯(cuò)誤,基本都是采用可預(yù)知的方式來(lái)判斷可能出現(xiàn)的錯(cuò)誤,并做相應(yīng)處理。

實(shí)際上,使用錯(cuò)誤捕獲后,編譯后的代碼實(shí)際上做了很多不為我們所知的操作,雖然 使用錯(cuò)誤捕獲從一定程度上方便了編碼過(guò)程,卻犧牲了一定的速度,有利有弊,所以我們應(yīng)該正確的使用 錯(cuò)誤捕獲。

測(cè)試的VB.NET

  1. Option Explicit  

  2. Dim cn As New ADODB.Connection  

  3. Dim rs As New ADODB.Recordset  

  4. Dim m_FldsName() As String  

  5. Private Sub Command1_Click()  

  6. Dim II As Long  

  7. Dim t As Single  

  8. cn.Open "Provider=SQLOLEDB.1;Persist 
    Security Info=False;User ID=sa;Initial 
    Catalog=廣商;Data Source=SUPER"  

  9. rs.Open "Select * from FldSet ", 
    cn, adOpenKeyset  

  10. Do Until rs.EOF = True 

  11. rs.MoveNext  

  12. Loop  

  13. rs.MoveFirst  

  14. t = Timer 

  15. ReDim m_FldsName(rs.Fields.Count)  

  16. For II = 0 To rs.Fields.Count - 1  

  17. m_FldsName(II) = rs.Fields(II).Name  

  18. Next  

  19. Do Until rs.EOF = True 

  20. ReadFieldsNotOnErr "Err1"  

  21. ReadFieldsNotOnErr "TableName"  

  22. ReadFieldsNotOnErr "Err2"  

  23. rs.MoveNext  

  24. Loop  

  25. MsgBox "NotErr:" & Timer - t  

  26. On Error Resume Next  

  27. rs.MoveFirst  

  28. t = Timer 

  29. Do Until rs.EOF = True 

  30. ReadFieldsOnErr "Err1"  

  31. ReadFieldsOnErr "TableName"  

  32. ReadFieldsOnErr "Err2"  

  33. rs.MoveNext  

  34. Loop  

  35. MsgBox "OnErr:" & Timer - t  

  36. rs.Close  

  37. cn.Close  

  38. End Sub  

  39. Private Sub ReadFieldsOnErr
    (FieldName As String)  

  40. Dim v As Variant  

  41. v = rs(FieldName).Value  

  42. End Sub  

  43. Private Sub ReadFieldsNotOnErr
    (FieldName As String)  

  44. Dim II As Long  

  45. Dim IsExists As Boolean  

  46. Dim v As Variant  

  47. IsExists = False 

  48. For II = 0 To UBound(m_FldsName) - 1  

  49. If m_FldsName(II) = FieldName Then  

  50. IsExists = True 

  51. Exit For  

  52. End If  

  53. Next  

  54. If IsExists = True Then  

  55. v = rs(FieldName).Value  

  56. End If  

  57. End Sub 

測(cè)試結(jié)果:

無(wú)錯(cuò)誤時(shí)

ReadFieldsOnErr : 0。46  ReadFieldsNotOnErr : 0。47

有錯(cuò)誤時(shí)

ReadFieldsOnErr : 0.96  ReadFieldsNotOnErr : 0.47

可以看到:不使用VB.NET錯(cuò)誤處理,速度相當(dāng)穩(wěn)定,而使用VB.NET錯(cuò)誤處理時(shí),有錯(cuò)誤的情況下速度落差較大,所以 對(duì)于在循環(huán)中 頻繁調(diào)用 的子過(guò)程,建議對(duì)可能出現(xiàn)的錯(cuò)誤進(jìn)行預(yù)處理,減少使用 On error來(lái)提升速度。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI