DbContext ChangeTracking снижает производительность?

Я нахожусь в процессе обновления приложения с EF1 до EF4.1 Я создал DbContext и набор POCO, используя шаблоны «ADO.NET DbContext Generator».

Когда я запрашиваю сгенерированный DbContext, часть запроса базы данных занимает 4 мс для выполнения (проверяется с помощью EF Profiler). А затем контексту требуется около 40 секунд (словами: FORTY!), Чтобы сделать то, что он делает, прежде чем он вернет результат приложению.

EF1 обрабатывает тот же запрос менее чем за 2 секунды.

Отключение AutoDetectChanges, LazyLoading и ProxyGeneration приносит мне 2-3 секунды.

Когда я использую метод расширения AsNoTracking (), я могу сократить общее время выполнения примерно до 3 секунд.

Это означает, что ChangeTracking виноват.

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

Есть идеи, как я могу решить эту проблему с производительностью?

31
задан cb1295 7 September 2011 в 01:48
поделиться