.net:私たちのカスタムデータアクセス層クラスはIdisposableを実装する必要がありますか?彼らは主にデータを格納/取得するためのデータストアとしてデータベースを使用しますか?.net:私たちのカスタムデータアクセス層クラスはIdisposableを実装すべきですか?
ありがとうございます。
.net:私たちのカスタムデータアクセス層クラスはIdisposableを実装する必要がありますか?彼らは主にデータを格納/取得するためのデータストアとしてデータベースを使用しますか?.net:私たちのカスタムデータアクセス層クラスはIdisposableを実装すべきですか?
ありがとうございます。
廃棄は、管理されていないリソースを解放するために主に使用されます。例えば、ソケット、データベースへの接続、ファイルハンドルなど。
あなたが任意のアンマネージリソースを追跡していない場合はDbConnection
がGCによって収集されたときにすべてのリソースが解放されるので、自分であなたがはIDisposable
を実装するは必要ありません。
私は2つのことを行うためにあなたをお勧めします:あなたはメンバ変数としてはDbConnectionをお持ちの場合は
a)は、IDisposable
を実装し、Disposeメソッドで接続を処分します。これはDALの使用時にusing
キーワードを使用している場合にのみ有効です。
b)using
を使用してできるだけ早くリソースが解放されるようにしてください。
どのタイプのIDisposableオブジェクトも、明示的に文書化していない限り、GCによって安全かつ適切にクリーンアップされると想定するのは危険です。放棄されたときにそれ自身の後にクリーンアップするために長命オブジェクトからイベントにサブスクライブするクラスでは、一般に、間接の2つの余分なレイヤーを介してすべてのイベントをルーティングするか、少なくとも1つのイベント以外のすべてのオペレーションをルーティングする必要があります。いくつかのイベント購読データベースラッパーがそれを行うかもしれませんが、私はそうするために全員に頼るつもりはありません。 – supercat
実際、あなたが話すイベントは、IDisposableだけでなく、ガベージコレクションされるすべてのオブジェクトについてです。 OPは、Disposeを呼び出さないのが安全かどうかを尋ねなかったが、IDisposableを実装する必要があるかどうかについては問いませんでした。 – jgauffin
**カプセル化されているので、それ自体が 'IDisposable'を実装するオブジェクトを処分する必要がありますか?**もしそうなら、はい。そうでなければ、いいえ。 –