パフォーマンスの問題を追跡しようとしています。私は、SQL Server Expressデータベースに対して次のSQLクエリを実行しています:EF SqlQuery問合せが直接問合せよりも20倍遅いのは正常ですか?
SELECT COUNT(OrderID)
FROM FutureOrderHeader
WHERE ScheduledFulfillmentTime >= {0}
AND ScheduledFulfillmentTime < {1}
AND SplitStatus <> 2
AND Deleted = 0
AND OrderMode = {2}
次のように私は、Entity Frameworkを使用してコマンドを実行すると:私は、コマンドを実行した場合
var results = ((DbContext)this._context).Database.SqlQuery<int>(SQL,start.BoxToSqlDataTime(),end.BoxToSqlDataTime(), (int)mode).Single();
それはその後、約20倍遅いですADO.NETを介して。 SQL Server ProfilerとEF Profilerを使用して、クエリが同じであると判断できました。 EFからこのクエリを実行します。 720回の平均時間は2837msです。ストレートADO.NETを使用して同じクエリを実行すると、平均146msかかります。
SQL Server Profilerでは、EFまたはADO.NETを使用しているかどうかにかかわらず、実行される実際のSQLテキスト、期間、CPU使用率、読み取り値などは同じです。 SQL Server Profilerによると、クエリ自体は、EFまたはまっすぐなADO.NETを使用しているかどうかにかかわらず、0msから2msの間にかかります。
このパフォーマンスヒットが正常かどうか、または何か不足しているのではないかと思っていました。
ありがとうございます!
これは、おそらくEFモデルの起動時間です。同じコンテキストで2回目を実行すると、まだ遅いですか? –
上記のテストを実行する前に、他のクエリを実行してEFの起動時間を計算しようとしました。 – user2141352