Я занимаюсь обновлением приложения от EF1 до EF4.1 Я создал DbContext и набор POCOs с использованием шаблонов "ADO.NET DbContext Generator".
Когда я запрашиваю сгенерированный DbContext, часть базы данных запроса занимает 4 мс для выполнения (проверяется с помощью EF Profiler). И затем он принимает контекст около 40 секунд (словами: FORTY!), Чтобы делать все, что он делает, прежде чем он вернет результат в приложение.
EF1 обрабатывает один и тот же запрос менее чем за 2 секунды.
Отключение AutoDetectChanges, LazyLoading и ProxyGeneration выигрывает у меня 2-3 секунды.
Когда я использую метод расширения AsNoTracking(), я могу сократить общее время выполнения до 3 секунд.
Это указывает на то, что ChangeTracking является виновником.
Но ChangeTracking - это то, что мне нужно. Я должен быть в состоянии в конечном итоге сохранить все изменения без необходимости подбирать, какие объекты были изменены.
Любые идеи о том, как я могу решить эту проблему производительности?