0

自社開発の ORM ソリューションを EntityFramework 5 に変更するための概念実証をまとめようとしていますが、最初に遭遇する問題は深刻なショー ストッパーのようです。

EF5は、アドホックSQLよりもスカラーSQL操作を実行するのに〜9倍長くかかるように見えますが、生成されたSQLコードを見ると、SQL自体はかなりよく書かれているようで、すぐに実行されます。

両方の私のC#コード:

 int surveyId = (from survey in upsEntities.Surveys where !survey.Deleted select survey.SurveyID).First();
            Debug.WriteLine("Loading surveyId : {0} through Linq took {1}ms using EF5", surveyId,
                            sw.Elapsed.TotalMilliseconds);

            sw.Restart();

            string sql = "Select top 1 surveyId from Survey where deleted = 0";
            object val = SMSDataManager.Instance.DataAccessManager.ExecuteScalar(sql);

            Debug.WriteLine("Loading surveyId : {0} through AdHock SQL took {1}ms using OrmDataManager", val,
                           sw.Elapsed.TotalMilliseconds);

SQL 出力: EF5:

SELECT TOP (1) 
[Extent1].[SurveyID] AS [SurveyID]
FROM [dbo].[Survey] AS [Extent1]
WHERE [Extent1].[Deleted] <> cast(1 as bit)

アドホック:Select top 1 surveyId from Survey where deleted = 0

EF5 を使用すると、Linq を介して surveyId : 1 をロードするのに2965.8625ms かかりました

AdHock SQL を介した surveyId : 1 の読み込みに 384.8073 ミリ秒かかりました

プロファイラーによると、この 2 つの間の期間は、EF5 では 1 ミリ秒ですが、アドホックでは 0 ミリ秒です。問題があるように見えるのは、EF5 の監査ログアウトイベントで、約 3 秒かかります。私のアドホック SQLでは、同じログアウト イベントに約 0.6 秒かかります。

EF5 のこの巨大なオーバーヘッドの原因は何ですか? また、これを軽減または説明するにはどうすればよいですか?

4

1 に答える 1

0

初期化は、アプリ ドメインごとに 1 回だけ行われます。モデルの複雑さとデータベースへの初回接続にかかる時間によっては、少し時間がかかる場合があります。初期化について簡単に説明している私のブログのこのコメントをご覧ください。 Entity Framework Code First View Generation Templates On Visual Studio Code Gallery - Comment #249 . また、このページ: Entity Framework 5 のパフォーマンスに関する考慮事項も参照してください。

于 2012-11-01T13:49:36.623 に答える