GetExecutionPlan и EnsureConnection приводят к очень низкой производительности EF - PullRequest
3 голосов
/ 16 ноября 2011

Я использую Entity Framework для поиска (и сохранения) объекта в моей базе данных SQL Server 2008 R2. Моя проблема с простым вызовом ObjectContext.FirstOrDefault (хотя он абстрагируется с помощью шаблона IRepository).

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

Итак, первое, что я подумал, это то, что у меня плохой индекс. Но поиск в SSMS выполняется практически мгновенно. (Это не проблема.) Также попытался переключить первый запрос, который я вызвал, и прирост производительности остался в основном с первым запросом.

Есть два метода, которые EF вызывает, которые занимают высокий процент моего времени выполнения. Это GetExecutionPlan и EnsureConnection.

Это просто накладные расходы, с которыми мне приходится иметь дело, если я хочу использовать EF? Или есть способ оптимизировать эти звонки?

Одна вещь, о которой я подумал, это повторное использование моего Entity Framework ObjectContext. Я думаю, что если бы я сделал это, то некоторые замедления были бы преодолены с помощью кэширования. Тем не менее, я прочитал плохие вещи о повторном использовании ObjectContext (именно поэтому я делал новый с каждым из моих вызовов службы).

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