2009-09-21 9 views
2

У меня очень большая реализация Framework Entity Framework (100+ таблиц/сущностей). При первом вызове SaveChanges при выполнении обновления у меня возникает время ожидания 18 секунд. Является ли это общепринятым для моделей каркаса больших объектов? Я слышал, что разделение EF-модели на более мелкие куски - способ повысить производительность. Мне интересно, если это единственный способ? Разделение на данный момент похоже на большую работу.Entity Framework 18 секунд при первом вызове SaveChanges()

  1. Должен ли я разделить модель EF?
  2. Должен ли я использовать несколько экземпляров контекста данных или только общий статический?
  3. Какова производительность, которую вы испытали с медленностью на EF и, в частности, SaveChanges()?

Спасибо!

ответ

0

Нет, этого не ожидается. Наша модель сущности такая же, как ваша, и мы этого не видим. Вам нужно профайлеровать свое приложение, чтобы выяснить, что на самом деле проблема, прежде чем вы уйдете, пытаясь ее решить. Я не могу предложить вам решение, не зная, каковы ваши результаты профилирования.

+0

Ну, по крайней мере, я знаю, проблема в том, что мое решение :-) – markti

0

Место, в котором мы сохраняем большинство данных в EF за одну операцию, составляет несколько сотен строк, расположенных на около. 80 таблиц. Это имеет второстепенное время отклика.

Это должно быть связано с чем-то еще, то нужно проверить:

  • Есть ли процессор используется в этих 18 секунд? По какому процессу?
  • Может быть, сетевая проблема, ожидающая таймаута?
  • Связано ли это с компилятором или jit?
+0

1. Да, на мой Core2 Duo я вижу 50% (т.е. один процессор на 100%) 2. DB является локальным , SQLExpress 3. Не похоже, что ... Счетчики JIT, похоже, не срабатывают при входе в систему. – markti

+0

@markti: можете ли вы использовать диспетчер задач, чтобы посмотреть, какой процесс использует 100% процессора. –

+0

Да, это приложение. – markti

1

Я вижу ту же проблему в моем проекте. Первый вызов SaveChanges занимает около 12 секунд и полное время процессора, а следующие вызовы - нет.

Первый опрос сущностей занял примерно то же время, прежде чем я использовал прегенерированные представления. Теперь 12-секундная первая задержка опроса не прошла, но первый вызов SaveChanges все еще занимает много времени. Возможно, есть способ предварительно создать некоторый код для SaveChanges ...

[Изменить] Я просто хотел упомянуть, что мне удалось избавиться от задержки при первом сохранении, изменив структуру базы данных. Сущность, для которой экономия занимает так много времени, представляет собой большую таблицу с большим количеством ограничений внешнего ключа для другой таблицы (не спрашивайте). Устранение ограничений внешнего ключа сделало трюк. [/ Edit]

Смежные вопросы