Я использую Entity Framework для поиска (и сохранения) объекта в моей базе данных SQL Server 2008 R2. Моя проблема с простым вызовом ObjectContext.FirstOrDefault
(хотя он абстрагируется с помощью шаблона IRepository).
Я замечаю действительно очень низкую производительность. Так что подключил профилировщик и обнаружил, что первый запрос, который я запускаю, - это то, где большинство замедлений.
Итак, первое, что я подумал, это то, что у меня плохой индекс. Но поиск в SSMS выполняется практически мгновенно. (Это не проблема.) Также попытался переключить первый запрос, который я вызвал, и прирост производительности остался в основном с первым запросом.
Есть два метода, которые EF вызывает, которые занимают высокий процент моего времени выполнения. Это GetExecutionPlan и EnsureConnection.
Это просто накладные расходы, с которыми мне приходится иметь дело, если я хочу использовать EF? Или есть способ оптимизировать эти звонки?
Одна вещь, о которой я подумал, это повторное использование моего Entity Framework ObjectContext. Я думаю, что если бы я сделал это, то некоторые замедления были бы преодолены с помощью кэширования. Тем не менее, я прочитал плохие вещи о повторном использовании ObjectContext (именно поэтому я делал новый с каждым из моих вызовов службы).