0

Entity Framework 4.0 を使用しています。データベースで多くの読み取り操作を行います (データ分析)。データは保存されません。現在、Lazy Loading にもかかわらず、データベース サーバーへの I/O 操作の数によって、アプリケーションの速度が大幅に低下しています。メモリにロードされた小さなテーブルのほとんどを決定し ( .ToList())、計算を生成しました。テーブル内のデータのコンテキストを自動的に読み取る方法はありますか? アイデアは、このテーブルをさらに参照すると、クエリされたデータベースではなく、アプリケーションのメモリのみであるということです。

今、私はこのコードを使用します:

public class cDBReader
{
        private List<RISK_T_MEMBERS> fMembers;

        public List<RISK_T_MEMBERS> Members
        {
            get
            {
                if (fMembers == null)
                    using (RiskEntities context = new RiskEntities(TConfiguration.connectionString))
                    {
                        context.RISK_T_MEMBERS.MergeOption = System.Data.Objects.MergeOption.NoTracking;
                        fMembers = context.RISK_T_MEMBERS.ToList();
                    }

                return fMembers;
            }
            set { fMembers = value; }
        }
}
4

2 に答える 2

0

最初に Lazy Loading の代わりに Eager Loading を試して、EF が読み込むものを完全に制御し、必要なものを一度手動でプリロードすることができます。ロードされたデータは、1 つのコンテキストの有効期間の境界内で存続します。さらに必要で、データベースが読み取り専用であることが確実な場合は、どこかに保存してから、新しいコンテキストが作成されたときに事前にロードされたデータを添付できます。

于 2013-03-19T14:11:24.253 に答える
0

もう少し情報を追加していただけますか?現在の実装の何が問題になっていますか?

必要なのはある種のキャッシングのようです。これはキャッシングの実装例です。

キャッシングを実装するさらに簡単な (私の意見ではやり過ぎではない) 方法は次のとおりです

最後になりましたが、あなたの実装です(すでに作成したものなど)。ここでシングルトンパターンが役立つのではないでしょうか? これは、必要なすべてのデータをグローバルに保存し、現在アクティブなコンテキストを提供することでデータへの取得を実装するシングルトン オブジェクトです。データが null の場合、アプリケーションはアクティブなコンテキストを使用してそれらを取得します。コンテキストをドロップして作成すると、しばらくするとアプリケーションの速度が向上する可能性もあります (これが、アクティブなコンテキストを getData 関数に提供する必要があると私が考える理由です)。

于 2013-03-19T13:11:18.177 に答える