Entity Framework замедляется после обновления с EF4 до EF6 (EntityFramework.6.2.0) - PullRequest
0 голосов
/ 01 октября 2019

Я обновляю старое веб-приложение MVC с EF4 до EF6 (и с MVC3 до MVC5), используя руководство, которое я нашел на SO.

Функционально выглядит нормально, но я заметил проблемы с производительностью.

Конкретные запросы в prod env для этого приложения, работающего с MVC3 / EF4, выполняются менее чем за полсекунды. То же самое в моей системе Dev после обновления займет несколько секунд.

Для сравнения я создал новое тестовое решение MVC / EF6 на том же компьютере разработчика, на котором я работаю с перенесенным приложением. Я рассмотрел приведенное ниже linq с помощью действия MCV и обнаружил, что между этими двумя приложениями существует большая разница в производительности.

Примечание: и старое, и тестовое приложение не имеют служебных данных в конструкторе контроллера, они обасоздайте только dbContext и выполните запрос.

var sites = DB.Sites.Take(50).Include("Users").OrderBy(s => s.SiteName).ToList();

новое тестовое приложение EF6: обновлено 200 мс старое приложение: 2 секунды

Я профилировал запросы на SQL Server и могуТам нет никаких проблем.

Я рассматриваю вопрос об удалении ADO Entity Framework из старого проекта и начинаю с добавления. но это было первое приложение модели, и это, по-видимому, удаляет все частичные классы, в которых определены метаданные (что приводит к множеству ошибок компиляции).

  • Следует ли удалить ADO Entity Frameworkиз старого проекта - и воссоздать в качестве базы данных первое приложение?
  • Есть ли что-то, что я пропустил - это может быть причиной проблемы?
  • как я могу узнать, где используется время?

Редактировать

Я удалил модель ADO Entity Framework (edmx) и заново обнаружил из базы данных. Это привело к значительному рефакторингу из-за различий во множественном числе между EF4 и EF6. Также были внесены изменения в поведение добавления / обновления / удаления сущностей.

Это не решило проблему производительности.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Решено:

в обновленном приложении web.config Я обнаружил, что строка подключения содержит: Pooling = False; Я удалил это.

Дополнительно в моем тестовом приложенииЯ обнаружил, что строка подключения имеет: App = EntityFramework

Производительность сразу улучшилась по сравнению с тестовым приложением

0 голосов
/ 01 октября 2019

Это будет очень сложно отлаживать издалека, но я бы начал с захвата запроса, созданного ef с помощью sql profiler, и выяснил, отсутствуют ли у вас какие-либо индексы в БД. SQLServer - темпераментный зверь, когда речь идет о разработке планов запросов, и если EF изменил свои запросы с 4 на 6, и в таблицах имеется достаточное количество данных, это, скорее всего, станет причиной вашей проблемы. Вы можете найти, что просто нужен новый индекс или что-то в этом роде.

Другой вариант, который не связан конкретно с вашей проблемой, но может оказать влияние, - это предварительная компиляция представлений в контексте EF, что должно сократить время первого запроса после запуска приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...