EF предварительно сгенерировать вид.Как быть уверенным, что эти представления используются EF? - PullRequest
1 голос
/ 26 марта 2012

У меня есть несколько проблем с производительностью на моем сайте. Я использую asp.net MVC 2 и Entity Framework 4.0. Я купил Entity Framework Profiler, чтобы посмотреть, какой запрос SQL генерирует EF.

Например, некоторые страницы открываются от 3 до 5 секунд. Это очень много для моего клиента.
Чтобы проверить, не является ли это проблемой производительности с SQL, сгенерированным EF, я использовал свой профилировщик и скопировал / вставил сгенерированный SQL в Sql Management Studio, чтобы увидеть план выполнения и статистику sql. Результат покажет менее чем за секунду.

Теперь, когда я удалил SQL-запрос, я подозреваю, что EF находится на этапе запроса.
Я следую шаг за шагом msdn , чтобы предварительно сгенерировать мой вид. Я не видел никакого прироста производительности.

Как быть уверенным, что мой запрос использует эти предварительно созданные представления?
Могу ли я что-нибудь сделать для повышения производительности моего сайта?

спасибо

1 Ответ

1 голос
/ 26 марта 2012

Прежде всего, имейте в виду, что предварительно скомпилированные запросы по-прежнему занимают столько же времени (фактически немного дольше) при первом запуске, поскольку запросы компилируются при первом вызове.После первого вызова вы должны увидеть значительное увеличение производительности по отдельным запросам.

Однако вы найдете лучший ответ на все вопросы производительности: сначала выясните, что занимает больше всего времени, а затем работайте над улучшениемв этой области.До тех пор, пока вы не запустите профилировщик и не узнаете, где блокируется ваша система, любое потраченное время на попытки ускорить процесс, скорее всего, будет потрачено впустую.

Как только вы определили, что занимает больше всего времени, есть многоиз возможных методов, которые можно использовать для ускорения работы:

  1. Кэширование данных, которые меняются не часто
  2. Реструктуризация доступа к данным, чтобы вы извлекали нужные данные за меньшее количество циклов.
  3. Обеспечение того, чтобы при запросах к базе данных вы не извлекали больше данных, чем вам нужно.
  4. Покупаете лучшее оборудование.
  5. ... и многие другие

Последнее замечание: в Entity Framework 5 планируется реализовать автоматическое кэширование запросов, что сделает предварительную компиляцию запросов практически бесполезной.Поэтому я рекомендую делать это только тогда, когда вы точно знаете, что вы получите значительное улучшение.

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