【发布时间】:2011-06-08 12:03:33
【问题描述】:
我一直在 finally 块中调用 Connection.Close,但是我今天了解到你 aren't supposed to do that:
不要在类的 Finalize 方法中对 Connection、DataReader 或任何其他托管对象调用 Close 或 Dispose。在终结器中,您应该只释放您的类直接拥有的非托管资源。如果您的类不拥有任何非托管资源,请不要在类定义中包含 Finalize 方法
因此,在处理 SqlCommand 对象不会处理或关闭分配给它的连接对象的理解下,以下(下面的简化代码)会同时处理命令和连接对象吗?如果我确保总是调用 Connection.Close,我真的需要调用 Connection.Dispose 吗?
Using cmd As New NpgsqlCommand(String.Empty, new connection())
cmd.CommandText = "some sql command here"
sqlCmd.Connection.Open()
...create and fill data table
sqlCmd.Connection.Close()
End Using
【问题讨论】:
-
finally block 和 finalizer 是两个完全不同的结构,目的完全不同。
-
谢谢大家,有点担心和困惑!
标签: .net ado.net garbage-collection connection database-connection