2

Entity Framework データベースに大量のレコードを挿入しましたが、実行後は不要になりました.SaveChanges();。さらに、私は実際にはできるだけ早くメモリを解放したいと考えています(新しいレコードが作成されるため)。古いレコード オブジェクトにリンクする変数は保持していませんが、GC はそれらを削除していないようです。そのため、データ コンテキストまたはそれらを存続させているのは何かだと思います。GCが占有するメモリを解放できるように、それらを正しく破棄するにはどうすればよいですか?

4

3 に答える 3

2
  1. これは本当に問題ではありません。GC に任せてください。

  2. それらを生かし続けるのは、データコンテキストまたは他の何かだと思います。

正しい。基本的な解決策は、コンテキストをできるだけ早く、できるだけ頻繁に破棄することです。

于 2012-11-22T09:42:10.723 に答える
0

「using」ステートメントでコンテキストを作成しようとしましたか?

using(var context = new MyContext())
{
    // Do work here .....
}
于 2012-11-22T09:44:04.900 に答える
0

SaveChanges()リソースを解放するのではなく、変更をデータベースにコミットするだけです。

Dispose()リソースを解放するには、オブジェクト コンテキストのメソッドを呼び出す必要があります。メソッドを呼び出す.Dispose()か、usingステートメント内にコードを配置することで、明示的に実行できます。

using(var ctx = new EntityModel())
{
    // do the inserts
    ctx.SaveChanges();
}

また、接続が Entity Framework によって開かれた場合ObjectContext.Dispose()、メソッドは接続を閉じます。それ以外の場合は、接続が不足する可能性があります...

同様の質問があります: Entity Framework Context を Using ステートメントに入れる必要がありますか?

于 2012-11-22T09:44:12.163 に答える