【发布时间】:2013-06-14 15:58:07
【问题描述】:
我注意到System.Data.SQLite 中的SQLiteConnection 对象拥有两个类似的方法:
Close()Dispose()
SQLiteDataReader 对象也是如此。
有什么区别?
【问题讨论】:
-
谢谢,我没看到这个帖子!
标签: c# .net system.data.sqlite
我注意到System.Data.SQLite 中的SQLiteConnection 对象拥有两个类似的方法:
Close()Dispose()SQLiteDataReader 对象也是如此。
有什么区别?
【问题讨论】:
标签: c# .net system.data.sqlite
Dispose如果没有关闭连接也会关闭连接,但是当调用Close时,可以再次重新打开连接。当连接被释放时,这是不可能的。
一般情况下,不要调用Close,而只是通过将连接的创建包装在using 块中来隐式调用dispose:
using (var connection = new SqlConnection(...))
{
// use connection here.
} // connection gets closed and disposed here.
【讨论】:
Dispose()在内部调用Close()。
Connection.Close() 将简单地关闭与连接字符串中定义的服务器的连接。在此之后可以使用/重新打开连接。
Connection.Dispose() 将彻底清理,删除所有非托管资源,防止再次使用该连接。一旦调用了处理,您就不应再尝试使用该对象。在Dispose(),Close()` 内肯定也会被调用。
如果可能的话,我会推荐using 使用类似这样的语法,以确保正确清理内容:
using(SqlLiteConnection conn = new SqlLiteConnection(...))
{
// Do work here
}
这将自动为您处理连接,无论是否引发异常。
【讨论】:
Close 不会在该连接上调用GC.SuppressFinalize 方法,而Dispose 会调用该方法。因此,不处理连接将使连接对象保持活动更长的时间。这对连接池没有影响,但对内存有影响。但是,SqlConnection- 的差异可以忽略不计。