VB.NET错误处理影响运行速度

开发 后端
VB.NET错误处理的使用必然会对性能有一定的影响。那么我们应当如何操作才能很好的避免或者是减少这一影响呢?

运用任何一个语言进行程序开发时,通常都会对程序开发中必然会出现的错误进行相应的处理。那么在VB.NET中,VB.NET错误处理往往会对运行速度有一定的影响。VB.NET中On Error 来捕获和处理错误,而且经常使用 On Error Resume Next 来可能产生的忽略错误。#t#

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

是的,使用VB.NET错误处理将会降低一些性能,在。Net 中,使用 Try Catch 也将会影响性能,所以我们使用Reflector 反编译微软的类库时,会发现他的子过程很少使用 Try 来捕获错误,基本都是采用可预知的方式来判断可能出现的错误,并做相应处理。

实际上,使用错误捕获后,编译后的代码实际上做了很多不为我们所知的操作,虽然 使用错误捕获从一定程度上方便了编码过程,却牺牲了一定的速度,有利有弊,所以我们应该正确的使用 错误捕获。

测试的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 

测试结果:

无错误时

  1. ReadFieldsOnErr : 0。46  
  2. ReadFieldsNotOnErr : 0。47 

有错误时

  1. ReadFieldsOnErr : 0.96  
  2. ReadFieldsNotOnErr : 0.47 

可以看到:不使用VB.NET错误处理,速度相当稳定,而使用VB.NET错误处理时,有错误的情况下速度落差较大,所以 对于在循环中 频繁调用 的子过程,建议对可能出现的错误进行预处理,减少使用 On error来提升速度。

责任编辑:曹凯 来源: wewill.cn
相关推荐

2009-10-21 10:05:30

VB.NET运行环境

2009-10-14 16:46:25

VB.NET OnSt

2009-08-05 16:04:50

2010-01-08 14:50:47

VB.NET测试硬盘速

2010-01-21 17:58:40

VB.NET List

2009-10-27 11:39:03

VB.NET事件处理程

2010-01-18 16:58:29

VB.NET Over

2010-01-14 18:22:05

VB.NET硬盘速度测

2010-01-22 15:42:01

VB.NET错误

2009-11-03 17:31:01

VB.NET窗体

2009-10-27 15:02:07

VB.NET文件处理

2010-01-14 15:15:22

VB.NET数据行处理

2010-01-12 15:04:01

VB.NET异常处理

2009-07-31 11:28:42

错误处理机制ASP.NET

2009-06-24 15:45:32

VB.NET

2011-06-17 11:05:22

VB.NET

2009-10-29 14:02:24

VB和VB.NET比较

2009-06-19 16:20:14

ASP.NET错误处理

2009-10-20 14:21:55

VB.NET fnSi

2009-10-14 12:51:41

VB.NET Data
点赞
收藏

51CTO技术栈公众号