Время выполнения ниже 30 секунд в первый раз и 25 секунд в следующий раз, когда я выполняю один и тот же набор кода. При просмотре в SQL Profiler я сразу вижу логин, а затем он сидит там около 30 секунд. Затем, как только выполняется инструкция select, приложение завершает команду ToList. Когда я запускаю сгенерированный запрос из Management Studio, запрос базы данных занимает всего около 400 мс. Он возвращает 14 строк и 350 столбцов. Похоже, что время, затрачиваемое на преобразование результатов базы данных в сущности, настолько мало, что это не примечательно.
Итак, что происходит за 30 секунд до вызова базы данных?
Если структура сущности такая медленная, мы не можем ее использовать. Есть ли что-то, что я делаю неправильно или что-то, что я могу изменить, чтобы резко ускорить это?
UPDATE: Хорошо, если я использую Скомпилированный запрос, первый раз он занимает 30 секунд, а второй раз занимает 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;
}