Можем ли мы использовать Entity Framework для вызова запросов с высокой загрузкой процессора? - PullRequest
0 голосов
/ 10 сентября 2018

Если у меня есть очень ресурсоемкие SQL-запросы, которые нужно написать в БД для получения данных. Рекомендуется ли использовать Entity Framework для извлечения данных с помощью вызовов хранимых процедур или мы должны придерживаться ADO.NET

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

SQL-скрипт - это SQL-скрипт, независимо от того, что или кто его написал или сгенерировал. Если вы реализуете хранимую процедуру с оптимальным кодом, то она будет работать хорошо. Если в вашем скрипте расточительные, ненужные операции, он не будет работать хорошо. Если скрипт сгенерирован с помощью Entity Framework и работает хорошо, то у вас нет проблем с его использованием в том виде, как оно есть. Если это не так хорошо, вам понадобится хранимая процедура, если вы хотите добиться хорошей производительности.

Когда вы задаетесь вопросом, хорошо ли работает сценарий, сгенерированный Entity Framework, вам нужно будет выполнить следующие шаги:

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

Я долгое время не работал с .NET и EF, но, насколько я помню, во многих случаях он собирал записи один за другим, выполняя отдельный запрос для каждого, даже когда они могли быть собранным одним запросом, который значительно увеличивает сложность.

Итак, короче говоря, EF работает хорошо во многих случаях, но если вы испытываете медлительность, вам нужно будет выяснить ее причину, как описано выше. Вы захотите проверить сгенерированный скрипт, чтобы увидеть, пишет ли он n скриптов, чтобы получить n записей, когда один скрипт мог вернуть все n необходимых записей. Здесь вы можете увидеть, как вы можете собрать сгенерированный запрос: Как просмотреть SQL, сгенерированный Entity Framework?

0 голосов
/ 10 сентября 2018

Основная ответственность EntityFramework / EntityClientDataProvider заключается в преобразовании LINQ-to-Entities или Entity SQL-запросов в SQL-запрос, который понимается базовой базой данных. Он связывается с поставщиком данных ADO.Net, который, в свою очередь, отправляет или получает данные из базы данных. В конце он использовал ADO.Net Data Provider для связи с базой данных, используя стандарт ADO.Net

Итак, ответ на ваш вопрос таков: он не меняет потребление энергии для вычислений.

Посмотрите на диаграмму архитектуры EF. Обзор EF

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