Я занимаюсь обновлением приложения с EF1 до EF4.1. Я создал DbContext и набор POCO, используя шаблоны «ADO.NET DbContext Generator».
Когда я запрашиваю сгенерированный DbContext, выполнение части запроса базы данных занимает 4 мс (проверено с помощью EF Profiler). Затем контексту требуется около 40 секунд (словами: СОРОК!) на то, чтобы сделать все, что он делает, прежде чем он вернет результат в приложение.
EF1 обрабатывает тот же запрос менее чем за 2 секунды.
Отключение AutoDetectChanges, LazyLoading и ProxyGeneration выигрывает у меня 2-3 секунды.
Когда я использую метод расширения AsNoTracking(), я могу сократить общее время выполнения примерно до 3 секунд.
Это указывает на то, что ChangeTracking является виновником.
Но ChangeTracking — это то, что мне нужно. Я должен иметь возможность в конечном итоге сохранить все изменения, не выбирая вручную, какие объекты были изменены.
Любые идеи, как я могу решить эту проблему с производительностью?
AutoDetectChanges
/ использоватьAsNoTracking
, но при этом создать трекинговые прокси (все свойства должны быть виртуальными). Интересно, меняется ли этот трек или нет, и я не могу проверить это сам сейчас. - person Ladislav Mrnka   schedule 12.05.2011EntityCollection
. - person Ladislav Mrnka   schedule 12.05.2011