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

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.

测试结果:

无错误时

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

有错误时

ReadFieldsOnErr : 0.96  
ReadFieldsNotOnErr : 0.47 
  • 1.
  • 2.

可以看到:不使用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

2010-01-08 14:50:47

VB.NET测试硬盘速

2009-08-05 16:04:50

2010-01-21 17:58:40

VB.NET List

2010-01-18 16:58:29

VB.NET Over

2009-10-27 11:39:03

VB.NET事件处理程

2010-01-22 15:42:01

VB.NET错误

2010-01-14 18:22:05

VB.NET硬盘速度测

2009-10-29 14:02:24

VB和VB.NET比较

2010-01-14 15:15:22

VB.NET数据行处理

2009-10-27 15:02:07

VB.NET文件处理

2009-11-03 17:31:01

VB.NET窗体

2010-01-12 15:04:01

VB.NET异常处理

2011-06-17 11:05:22

VB.NET

2009-06-24 15:45:32

VB.NET

2009-10-20 14:21:55

VB.NET fnSi

2009-10-14 12:51:41

VB.NET Data

2009-06-19 16:20:14

ASP.NET错误处理

2009-07-31 11:28:42

错误处理机制ASP.NET
点赞
收藏

51CTO技术栈公众号