您好,登錄后才能下訂單哦!
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
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, adOpenKeysetDo 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
測(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ì)億速云的支持。
免責(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)容。