【问题标题】:What is the difference between connection.Close() and connection.Dispose()? [duplicate]connection.Close() 和 connection.Dispose() 有什么区别? [复制]
【发布时间】:2013-06-14 15:58:07
【问题描述】:

我注意到System.Data.SQLite 中的SQLiteConnection 对象拥有两个类似的方法:

  • Close()
  • Dispose()

SQLiteDataReader 对象也是如此。

有什么区别?

【问题讨论】:

标签: c# .net system.data.sqlite


【解决方案1】:

Dispose如果没有关闭连接也会关闭连接,但是当调用Close时,可以再次重新打开连接。当连接被释放时,这是不可能的。

一般情况下,不要调用Close,而只是通过将连接的创建包装在using 块中来隐式调用dispose:

using (var connection = new SqlConnection(...))
{
    // use connection here.
} // connection gets closed and disposed here.

【讨论】:

  • 看一下source ...可以看出Dispose()在内部调用Close()
  • 感谢您的回答(抱歉重复)
  • @Steven 我说的是吗?
【解决方案2】:

Connection.Close() 将简单地关闭与连接字符串中定义的服务器的连接。在此之后可以使用/重新打开连接。

Connection.Dispose() 将彻底清理,删除所有非托管资源,防止再次使用该连接。一旦调用了处理,您就不应再尝试使用该对象。在Dispose(),Close()` 内肯定也会被调用。

如果可能的话,我会推荐using 使用类似这样的语法,以确保正确清理内容:

using(SqlLiteConnection conn = new SqlLiteConnection(...))
{
   // Do work here
}

这将自动为您处理连接,无论是否引发异常。

【讨论】:

  • 一个细微的区别是Close 不会在该连接上调用GC.SuppressFinalize 方法,而Dispose 会调用该方法。因此,不处理连接将使连接对象保持活动更长的时间。这对连接池没有影响,但对内存有影响。但是,SqlConnection- 的差异可以忽略不计。
  • 谢谢,我现在更清楚了(抱歉重复了)
猜你喜欢
  • 2014-04-12
  • 2015-11-23
  • 2013-02-13
  • 2011-04-26
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多