-1
的请看看下面的代码:优化配置管理对象
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim objCommand As SqlCommand
Dim objCon As SqlConnection
Dim p1 As Person
Try
p1 = New Person
p1.DoSomething()
objCommand = New SqlCommand
Using objCommand
Dim strConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=Test;Integrated Security=True"
objCon = New SqlConnection
Using objCon
objCon.ConnectionString = strConString
objCon.Open()
objCommand.Connection = objCon
objCommand.CommandText = "select startdate from person "
Dim objDR As SqlDataReader = objCommand.ExecuteReader
If objDR.HasRows Then
objDR.Read()
Using objCon
Dim startdate As String = objDR("startdate")
End Using
End If
End Using
End Using
Catch ex As Exception
Throw
Finally
If objCon.State = ConnectionState.Open Then
objCon.Close()
End If
objCon = Nothing
objCommand = Nothing
p1=Nothing 'This line is still needed
End Try
End Sub
据我所知,在finally子句中的代码是毫无意义的,因为连接和命令被包裹在using语句。
但是,如果您有像Person这样的不使用非托管资源的自定义类,会发生什么情况?当然,在这种情况下,FINALLY子句将需要确保对象(在堆上)的引用设置为空,无论是否抛出异常?
谢谢。 +1。如果你有一个实例变量是一个对象,会发生什么。当创建它的类被销毁时,它会被销毁吗? – w0051977 2013-03-24 13:02:41
引用类型(类)的实例不会立即“销毁”。只要没有“根源”引用,它们就可用于垃圾回收。因此,对于具有实例变量的情况,一旦没有对持有实例变量的对象的引用,并且没有其他变量引用实例变量引用的对象,则它所引用的对象将可用于GC。 – PHeiberg 2013-03-24 13:07:48