6

SQLiteCommandオブジェクトをどのように処理しますか、後で呼び出す必要ありますか?Dispose()ExecuteScalarExecuteNonQueryExecuteReader

SQLiteCommandのドキュメントの例では破棄されませんが、SQLiteTransactionの例ではSQLiteCommandオブジェクトが破棄されます。

ただし、私は常にデータリーダーオブジェクトを閉じます。私のアプリケーションは多くのスレッドからデータベースにアクセスします。

主に、接続をリークしたり、SQLiteを妨害したりしないことに関心があります。私は知っているusingIDisposable使用法

4

4 に答える 4

10

IDisposable管理されていないリソースを使用する可能性があるため、実装が終了したらすぐにすべてを破棄することをお勧めします。

これは、このオブジェクトを使用するコードをラップし、例外の場合にも破棄するため、 using-statementを使用して実行する必要があります。

using(var con = new SQLiteConnection(conString))
using(var cmd = new SQLiteCommand(con))
{
    con.Open();
    // ...
} // also closes the connection
于 2013-03-14T11:41:31.517 に答える
2

使い捨ての場合は、二度と使用しない場合は廃棄してください。を使用して使用するのが最善です

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

そのため、使用スコープを離れるときに自動的に破棄されます。

于 2013-03-14T11:43:08.740 に答える
1

これを行うだけです:

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

コマンドでdisposeを呼び出さなくても、それほど悪いことはありません。ただし、Disposeを呼び出すと、ファイナライザーへの呼び出しが抑制され、disposeの呼び出しでパフォーマンスが向上します。

于 2013-03-14T11:41:03.437 に答える
1

usingステートメントは、Close()を呼び出すコードをバイパスする例外が発生した場合でも、オブジェクトに対してDisposeを呼び出します。このようにして、リーダーまたは接続を閉じるためだけにtry/finallyブロックを作成する必要はありません。また、適切なfinallyブロックを書き込むのを忘れるこの100分の1のケースも回避します。

このような100分の1のケースは、予想よりもはるかに頻繁に発生する傾向があります。

于 2013-03-14T11:52:00.290 に答える