さて、質問はほとんどそれをすべて言います、しかし私はあなたに文脈を与えることを試みます。私はEntityFramework4.0を使用していますが、次の構文を頻繁に使用しています-
using (MLEntities context = ModelAccess.GetContext())
{
/*just a sample statement*/
this.ClientList = context.Clients.ToList();
...
//Some other code
}
私の理解では、using
ブロックを終了するたびDispose()
に、ObjectContext
クラス(MLEntitiesの基本クラス)のメソッドが呼び出されます。これにより、管理されていないリソース、特にこの場合はデータベース接続が解放されると思います。しかし、コンテキストを介しthis.ClientList = context.Clients.ToList();
てコンテキストオブジェクトへの参照を保持しているため、ガベージコレクションは行われません。右?
インスタンス化されたコンテキストオブジェクトの中には、アプリケーションの実行中に、それらがまだ保持されているのか、アプリケーションによって使用されているのか、リリースされているのかを知る必要があります。ブロック外のコンテキストの参照はありませんが、参照があるusing
場合でも、その参照を使用しようとすると、アプリケーションで使用されているコンテキストオブジェクトが作成されます。では、どうすればそれができますか?任意の提案をいただければ幸いです。ありがとう。
編集:実際、私はコンテキストオブジェクトへの直接参照を保持していると言うつもりはありませんでした。正直な間違い。私が意味したのはClients
、コンテキストのプロパティであり、コンテキストをインスタンス化する現在のオブジェクトが存在する限り、this.ClientList
への参照を保持しているため、コンテキストオブジェクトも存続しませんか?Clients
this.ClientList