采用这样的代码:
Dim dt As New DataTable("Table")
Dim sda As New SqlDataAdapter(pQuery, pCon)
sda.SelectCommand.CommandTimeout = pCommandTimeout
sda.Fill(dt)
sda.Dispose()
Return dt
和
Dim myconnection As SqlConnection = New SqlConnection(DBValues.m_sDBString)
myconnection.Open()
Try
Dim com As New SqlCommand(cmd, myconnection)
com.ExecuteNonQuery()
com.Dispose()
Catch ex As Exception
Throw ex
Finally
If myconnection.State = ConnectionState.Open Then
myconnection.Close()
myconnection.Dispose()
End If
End Try
什么时候过度表达会调用Close()和Dispose()之类的东西?因为GC显然在大部分时间内部处理,但不是所有时间(?)。到目前为止,我还没有真正看到有人对如何区分何时过度和何时过分做出非常明确和明确的解释,或者明确地做这个和让GC处理它之间有什么区别。有人可以解释一下吗?谢谢!
答案 0 :(得分:3)
如果您没有做比示例中更复杂的事情,那么它可能过度。
您可以使用using
关键字来简化操作。它自动从实现Dispose
的类中调用对象的IDisposable
方法。
Relevant documentation on the using
keyword, for VB.NET
另请注意,Dispose
SqlConnection
方法也调用其Close
方法(运行您在代码中执行的相同状态验证)。
请注意,在某些情况下,您可能需要手动调用Dispose
,而不是使用using
。例如,您可能希望在多个上下文中使用数据读取器,因此可能不希望在其中任何一个中使用using
。你会知道你何时处于这些情况之一,然后自己打电话给Dispose
并不会有点矫枉过正。但只有这样。