Время выполнения ниже - 30 секунд в первый раз и 25 секунд в следующий раз, когда я выполняю тот же набор кода. При просмотре в SQL Profiler я сразу вижу логин, потом он просто сидит около 30 секунд. Затем, как только выполняется оператор выбора, приложение завершает команду 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;
}