Я немного измерения производительности вопроса между EF запросом прогоном через веб-приложение и запуск Profiler генерируется T-SQL непосредственно в окно SQL Query.Entity Framework и SQL Server Profiler
Ниже мой EF запрос, который выполняется с помощью веб-приложений:
IEnumerable<application> _entityList = context.applications
.Include(context.indb_generalInfo.EntitySet.Name)
.Include(context.setup_budget.EntitySet.Name)
.Include(context.setup_committee.EntitySet.Name)
.Include(context.setup_fund.EntitySet.Name)
.Include(context.setup_appStatus.EntitySet.Name)
.Include(context.appSancAdvices.EntitySet.Name)
.Where(e => e.indb_generalInfo != null);
if (isIFL != null)
_entityList = _entityList.Where(e => e.app_isIFL == isIFL);
int _entityCount = _entityList.Count(); // hits the database server at this line
Хотя трассировка выше EF Query в SQL Profiler это показывает, что потребовалось около 221'095 мса выполнить. (Таблица приложений содержит 30 000+, indb_generalInfo с 11 000+ и appSancAdvices с 30 000 + записей).
Однако, когда я копирую T-SQL из Profiler и запускаю его непосредственно из окна Query, он принимает только 4'000 мс.
Почему это так?
Вы пытались выполнить один и тот же запрос несколько раз? Entity Framework все еще нуждается в генерации этого запроса, но он будет кэшироваться для будущего запроса. Кроме того, если вы делаете 'Count()', нет необходимости в интенсивной загрузке. –
Да, я пробовал это раньше. Но вопрос был именно тем, что @Arnold уведомил. –