2011-01-02 13 views
0

.net:私たちのカスタムデータアクセス層クラスはIdisposableを実装する必要がありますか?彼らは主にデータを格納/取得するためのデータストアとしてデータベースを使用しますか?.net:私たちのカスタムデータアクセス層クラスはIdisposableを実装すべきですか?

ありがとうございます。

+0

**カプセル化されているので、それ自体が 'IDisposable'を実装するオブジェクトを処分する必要がありますか?**もしそうなら、はい。そうでなければ、いいえ。 –

答えて

1

廃棄は、管理されていないリソースを解放するために主に使用されます。例えば、ソケット、データベースへの接続、ファイルハンドルなど。

あなたが任意のアンマネージリソースを追跡していない場合はDbConnectionがGCによって収集されたときにすべてのリソースが解放されるので、自分であなたがIDisposableを実装するは必要ありません。

私は2つのことを行うためにあなたをお勧めします:あなたはメンバ変数としてはDbConnectionをお持ちの場合は

a)は、IDisposableを実装し、Disposeメソッドで接続を処分します。これはDALの使用時にusingキーワードを使用している場合にのみ有効です。

b)usingを使用してできるだけ早くリソースが解放されるようにしてください。

+1

どのタイプのIDisposableオブジェクトも、明示的に文書化していない限り、GCによって安全かつ適切にクリーンアップされると想定するのは危険です。放棄されたときにそれ自身の後にクリーンアップするために長命オブジェクトからイベントにサブスクライブするクラスでは、一般に、間接の2つの余分なレイヤーを介してすべてのイベントをルーティングするか、少なくとも1つのイベント以外のすべてのオペレーションをルーティングする必要があります。いくつかのイベント購読データベースラッパーがそれを行うかもしれませんが、私はそうするために全員に頼るつもりはありません。 – supercat

+0

実際、あなたが話すイベントは、IDisposableだけでなく、ガベージコレクションされるすべてのオブジェクトについてです。 OPは、Disposeを呼び出さないのが安全かどうかを尋ねなかったが、IDisposableを実装する必要があるかどうかについては問いませんでした。 – jgauffin

関連する問題