2

Dispose()を使用する方法と理由を誰かに説明してもらえますか?これは、ASP.NET MVC 4に付属している既定のコントローラーテンプレートの一部です。オブジェクト(この場合はデータベースのデータ)が使用されなくなったときに、.NETのガベージコレクターが自動的に起動するべきではありませんか?

データベースからロードするときにDispose()を使用する必要がありますが、通常のオブジェクト割り当ては使用しないでください。

4

2 に答える 2

2

ガベージコレクションは、管理対象のメモリリソースで自動的に機能します。ただし、アンマネージメモリまたは解放する必要のあるファイルハンドルなどの特別な非メモリリソースを使用するクラスが存在する場合があります。

Entity Frameworkコンテキストは、共有接続プールから接続にアクセスします。これらの接続は使用されなくなるため、いつそれらの接続を放棄できるかを通知する必要があります。

データベースからロードするときにDispose()を使用する必要がありますが、通常のオブジェクト割り当ては使用しないでください。

Disposeメソッドは、アンマネージメモリまたは非メモリリソースを使用する可能性のあるクラスによってのみ実装する必要があります。クラスがIDisposableインターフェースを実装Disposeしている場合は、そのオブジェクトを使い終わったときに常にそれを呼び出す必要があります。

于 2012-10-17T03:10:21.557 に答える
2

Dispose管理されていないリソースを処理するときに使用されます(いわば、Disposableパターン)。はい、.NETガベージコレクターは.NET管理対象オブジェクトをクリーンアップしますが、データベース接続は.NETFrameworkによって管理されていない下位レベルのオブジェクトです。ファイルハンドラーについても同じです。実際のファイルハンドルは.NETによって管理されないため、ファイルを開いたり書き込んだりするときにDisposeパターンを使用します。

MSDNのドキュメントには、それを実装する理由とその理由が記載IDisposableされています。

EFはこれを使用します。これDbContextは、その下に、DbDataConnection管理されていないリソースで機能するが含まれているためです。そのような状況では、それにIDisposable応じて管理されていないリソースのクリーンアップを実装して処理するのが最善です。

于 2012-10-17T03:10:48.087 に答える