0

采取这样的代码:

    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 处理它之间有什么区别,提出了非常清晰和明确的解释。有人可以解释一下吗?谢谢!

4

1 回答 1

3

如果您没有做任何比示例中更复杂的事情,那么它可能是过度的。

您可以使用using关键字使事情变得更简单。它自动调用Dispose实现IDisposable.

关键字的相关文档using,用于 VB.NET

另请注意,该Dispose方法也SqlConnection调用其Close方法(运行您在代码中执行的相同状态验证)。

请注意,在某些情况下您可能不得不Dispose手动调用而不是使用using. 例如,您可能希望在多个上下文中使用数据读取器,因此using可能不需要在其中任何一个中使用。当你处于其中一种情况时,你会知道,然后打电话给Dispose自己不会过分。但也只有那时。

于 2013-06-10T18:20:02.687 回答