重複の可能性:
using ブロックはデータベース接続を閉じますか?
以下はdb.Close()
不要ですか?
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close();
}
重複の可能性:
using ブロックはデータベース接続を閉じますか?
以下はdb.Close()
不要ですか?
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close();
}
using 句が使用されている場合、DbConnection を閉じる必要はありますか?
いいえ、using 句が使用されている場合、DbConnection を閉じる必要はありませんか?
と
はい、スコープがusing
終了すると、接続はすべてのメモリを閉じて解放することを意味するため、ここでは不要です。
DBConnection
はインターフェイスを実装しているため、 のメソッドにIDisposable
は close 関数があります。Dispose
DBConnection
ただし、いくつかの行が終了行の後にある場合は便利です
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close(); //Useless
}
でもここは便利
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close(); //Useful
// Some more code
}
その場合、あなたはすることができます
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
}
// Some more code which was previously inside using section.
コードを確認したことを確認するために:)
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = (DbConnectionOptions) null;
this._poolGroup = (DbConnectionPoolGroup) null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
これは、DbConnectionから継承しているSqlConnectionの実装です。ご覧のとおり、 this.Close()メソッドがあります:)
私が知っている限り、Dispose()
メソッドが呼び出されると、Close()
自動的に実行されます。
ここdb.Close();
では必要ありません。
閉じブレースでDispose()
が呼び出されます。
DbConnection
このDispose
メソッドでは、接続が閉じているかどうかもチェックすると思います。いいえ、おそらく必要ではありませんが、個人的には良い習慣であり、読みやすさが向上し、何らかのClose
方法で呼び出されるため、パフォーマンスに影響を与えないと思います。
SqlConnection
(Derived of DbConnection
) クラスの dispose 実装から抽出されたコード:
public void Dispose()
{
Dispose(true);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
this.Close();
}
base.Dispose(disposing);
}
using
キーワードはインターフェイスを使用しIDisposable
ます。上記のメソッドはメソッドの実装です。接続を閉じます。