我有处置SQLiteCommand对象?(Do I have to Dispose the SQLi

2019-07-21 14:42发布

如何看待SQLiteCommand对象,我必须调用Dispose()ExecuteScalarExecuteNonQueryExecuteReader或不?

在文档例如SQLiteCommand不处理它,而在SQLiteTransaction的例子处置的SQLiteCommand对象。

我总是虽然关闭数据读取器对象。 我的应用程序访问从多个线程分贝。

主要是我很感兴趣,不漏连接或干扰的SQLite。 我知道的usingIDisposable使用

Answer 1:

这是最佳实践处置实现一切IDisposable为你完成它,因为它可能会使用非托管资源,尽快。

这应该与做using语句来 ,因为它包装使用该对象的代码,因为它也部署它的异常情况下。

using(var con = new SQLiteConnection(conString))
using(var cmd = new SQLiteCommand(con))
{
    con.Open();
    // ...
} // also closes the connection


Answer 2:

如果是一次性的,它配置如果您不会再使用它。 最好的是,使用使用

using(SQLiteCommand cmd as new SQLiteCoammand())
{
   ...
}

因此,利用留下的范围时,它会自动设置。



Answer 3:

只是这样做:

using(var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString))
using(var command = connection.CreateCommand())
{
   command.CommandText = "...";
   connection.Open();
   command.ExecuteNonQuery();
}

不调用处理的命令不会做任何事情太糟糕了。 然而调用Dispose它会剿调用的终结,使得调用处理性能增强。



Answer 4:

即使发生异常绕过调用Close()方法的代码使用语句将调用Dispose的对象上。 这样,您就不必写一个try / finally块只是为了关闭读者或连接。 您还避免这种1英寸-100的情况下,您忘了写正确的finally块。

这种1英寸-100病例有发生的倾向更加频繁地比人们想象



文章来源: Do I have to Dispose the SQLiteCommand objects?