WCF サービス (ビジネス \ アプリケーション層) で EF4.3.1 を使用しています。既存のデータベースと Fluent Mapping (EntityTypeConfiguraiton) で EF Code First を使用しています。要求ごとに DbContext のインスタンスが作成され、破棄されます。
DbContext を使用する汎用リポジトリがあります。
テスト サーバーで実行したところ、10 人の同時ユーザーでビジネス レイヤー アプリ プールが 30 分ほどでメモリ不足になることがわかりました。IIS ワーカー プロセスのダンプを取得したところ、EF が大量のメモリを消費していることがわかりました。EF によって作成された大きなオブジェクト ヒープに多くのオブジェクトがありました。ヒープ上の DB から取得したデータのオブジェクトを確認できました。DbContext dispose がこれを処理しているかどうかはわかりません。GC の % 時間は非常に高かった (> 16%)。ダンプ ファイルで気付いた 1 つの奇妙な点は、すべてのマッピング ファイルの文字列表現を格納する巨大な文字列オブジェクト (約 87 MB) があったことです。私はこれが非常に奇妙だと感じました、
EF でこのようなメモリ リークの問題が発生した人はいますか? また、EF の使用方法に問題がある場合もお知らせください。詳細が必要な場合はお知らせください。
ありがとうプラサド
編集 AutiFac DI (WCF 統合) を使用して DbContext のインスタンスを挿入します。Dbcontext の有効期間は InstancePerLifeTime (http 要求ごとに 1 つの要求) です。この方法を実装して、1 つの HTTP リクエストですべてのリポジトリ インスタンスで DbContext のインスタンスを共有しました。
データベースにアクセスする方法は // 宣言 IGenericRepository UserRepository {get;set;} // AutoFac を使用したプロパティ注入
// 使い方 var user = UserRepository.FindBy(u => u.userid == "test@test.com");
リポジトリでは明示的なトランザクションを使用していません。