3

賢い人たちがここで私を助けてくれることを願っています!

Entity Framework 1 と EFPocoAdapter を使用した ASP.NET Web サービス アプリがあります。この Web サービスを実行しているアプリ プールのメモリ使用量は、Web サービスの呼び出しごとに増え続けています。現在、メモリの使用量を監視しており、1GB を超え始めたら、アプリ プールをリサイクルしてメモリを解放します。

'using' ステートメントで各 Web メソッドのオブジェクト コンテキストをインスタンス化して、オブジェクト コンテキストを開いたままにしないようにします (efprof で観察)。

そこで、Ants メモリ プロファイラー 7 を使用して何が起こっているかを追跡し、Web サービスへの最初の呼び出しの後 (この時点で EF フレームワークがそのビューを生成するなど)、スナップショットを作成しました。次に、同じ呼び出しを行い、別のスナップショットを取得します。Ants は、最後のスナップショット以降に作成された新しいオブジェクトがほぼすべて System.Data.Common.QueryCache.QueryCacheManager に関連していることを示しています。

キャッシュのポイントはパフォーマンスの向上であることはわかっていますが、私たちの場合、メインのアプリ/ビジネスの性質上、これらの呼び出しを繰り返す可能性は最小限であるため、すべてのクエリ プランをキャッシュする必要はないと思います。

それで、私の質問.....このキャッシングをオフにする方法はありますか、それとも私はここで間違ったツリーを吠えていて、私が気付いていない何か他のことが起こっていますか?

これに対する答えを求めてウェブ全体を検索しましたが、速度/パフォーマンスの向上のためのエンティティ追跡に関連していると思われる MergeOption プロパティしか見つかりませんでした。

4

1 に答える 1

0

データを変更せずに選択する場合は、オブジェクトの変更の追跡をオフにするだけです。

datacontext.ObjectTrackingEnabled = false;

Linq2SQL と同様の状況で私にとってはうまくいきました。

于 2011-12-13T01:01:50.080 に答える