以下の executeTime は、初回は 30 秒、次に同じコード セットを実行するときは 25 秒です。SQL Profiler で見ていると、すぐにログインが表示され、そこに約 30 秒間留まります。次に、select ステートメントが実行されるとすぐに、アプリは ToList コマンドを終了します。Management Studio から生成されたクエリを実行すると、データベース クエリは約 400 ミリ秒しかかかりません。14 行と 350 列を返します。データベースの結果をエンティティに変換するのにかかる時間は非常に短いため、目立たないようです。
では、データベース呼び出しが行われる前の 30 秒間に何が起こっているのでしょうか?
エンティティ フレームワークがこれほど遅い場合、使用することはできません。私が間違っていること、またはこれを劇的にスピードアップするために変更できることはありますか?
更新: コンパイル済みクエリを使用すると、最初は 30 秒かかり、2 回目は 1/4 秒かかります。最初の通話をスピードアップするためにできることはありますか?
using (EntitiesContext context = new EntitiesContext())
{
Stopwatch sw = new Stopwatch();
sw.Start();
var groupQuery = (from g in context.Groups.Include("DealContract")
.Include("DealContract.Contracts")
.Include("DealContract.Contracts.AdvertiserAccountType1")
.Include("DealContract.Contracts.ContractItemDetails")
.Include("DealContract.Contracts.Brands")
.Include("DealContract.Contracts.Agencies")
.Include("DealContract.Contracts.AdvertiserAccountType2")
.Include("DealContract.Contracts.ContractProductLinks.Products")
.Include("DealContract.Contracts.ContractPersonnelLinks")
.Include("DealContract.Contracts.ContractSpotOrderTypes")
.Include("DealContract.Contracts.Advertisers")
where g.GroupKey == 6
select g).OfType<Deal>();
sw.Stop();
var queryTime = sw.Elapsed;
sw.Reset();
sw.Start();
var groups = groupQuery.ToList();
sw.Stop();
var executeTime = sw.Elapsed;
}