Как улучшить производительность запуска крупной модели Entity Framework 4.0? - PullRequest
5 голосов
/ 20 июля 2011

В проекте с приблизительно 350 объектами в модели объектов EDMX моя команда испытывает длительные ожидания, когда происходит первый запрос и когда происходит первое сохранение.

При профилировании простого случая, который запускает несколько запросов и сохраняет, простой набор шагов для запуска запроса и сохранения занимает минуты.

Первый запрос занимает 47% от общего времени только на вызов этого метода структуры, который выполняет запрос.

Первое сохранение занимает 50% от общего времени только в System.Data.Objects.ObjectContext.SaveChanges.

Есть ли какие-либо хорошие варианты для повышения производительности - это может истощить разработкувремя.

(Когда система запускается в производство, она раздражает при запуске, но не вызывает проблем при текущем выполнении)

Ответы [ 2 ]

6 голосов
/ 20 июля 2011

Когда вы впервые используете контекст, он генерирует модель отображения, определенную в метаданных.Опция - предварительно сгенерировать эту модель и включить предварительно сгенерированные файлы в ваше приложение (но вы должны восстанавливать его каждый раз, когда вы изменяете свой EDMX).

Такая большая модель, вероятно, должна быть разделена на несколько меньших моделей.Я вряд ли верю, что 350 лиц образуют единый домен, который нельзя разделить.

1 голос
/ 21 июля 2011

Один большой EDMX приведет к большому ObjectContext.каждый раз, когда вы делаете using(var ctx = new YourObjectContext()), он собирается построить большой объект, инициализировать множество коллекций (вероятно, 350 из них), и это сделает ваши операции с базами данных интенсивными ЦП.Вы наверняка столкнетесь с проблемами производительности, когда получите большой объем трафика.

Я бы предложил разбить большой WDMX на меньший EDMX и создать разные ObjectContexts.Вы должны поместить небольшое количество логически сгруппированных объектов в один ObjectContext.

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