コンテキスト自体は多くのメモリを占めないため、using()ブロックを使用している場合は、処分する必要があります。しかし、より大きな問題はエンティティのリストを返すでしょう。サーバーは要求を処理するためにメモリを割り当て、要求が完了するとすぐにそのメモリを解放しません。データはガベージコレクションに送られますが、IISに割り当てられた予約済みメモリは必要になりません。問題は、1つのリクエストがかなりのメモリをかなり必要とすることを示しているということです。
サーバーコールバックの場合は、表示することを意味するデータに固有のビューモデルを定義し、エンティティからそのデータを選択して、ビューモデルのリストを返します。同じことがWeb APIメソッドにも適用され、必要なデータだけを返すようにDTOを定義します。
var answers = ctx.Answers
.Select(a => new AnswerViewModel
{
AnswerId = a.AnswerId,
AnswerText = a.AnswerText,
AnswerTypeName = a.AnswerType.Name, // For example, getting values from child references...
}).ToList();
戻るエンティティは、ビューのパフォーマンスとメモリ使用ポイントの両方から非常に非効率になり、プラスあなたはDbContextの範囲外の参照を使用しようとすると、あなたは簡単に遅延ロードの問題に実行することができます。
また、.Where()句を使用してデータをフィルタリングして、行が多すぎないようにして、データサイズが大幅に拡大する可能性のある道路を検討してください行の制限やページングをサポートして、サーバーが停止する状況を回避することを検討したいと思うかもしれません。なぜなら、任意の数のユーザーがすべてを要求できる2M Answerレコードが終了するからです。
それ以外の場合は、リクエストごとに複数のコンテキストが作成されていることを確認してください。これにはパフォーマンスコストが含まれています。 AutofacのようなIoCコンテナを読むことをお勧めします。これは、MVCに統合することができ、要求ごとに1つのインスタンスしか作成されないように、DbContextまたはWorkラッパーの単位を管理できます。