Службы данных WCF: вызов SaveChanges () вызывает 100% CPU - PullRequest
0 голосов
/ 27 мая 2010

Я разрабатываю Службу данных WCF на основе модели данных Entity Framework 4.0, но мы не можем перейти в Production при текущих обстоятельствах.

Мое клиентское приложение добавляет и модифицирует множество объектов, около 100 000. Затем он вызывает метод SaveChanges службы, чтобы сохранить все изменения в одном действии. Служба данных WCF размещается в хост-процессе NServiceBus, хотя я не знаю, способствует ли это проблеме.

Это работает, но на виртуальной машине с 1 ЦП, 4 ГБ ОЗУ, Win2008 x64 требуется больше часа. Что еще более важно, загрузка процессора увеличивается до 100%. Потребление оперативной памяти колеблется от 75% до 85%. Это виртуальная машина среды разработки, поэтому база данных SQL Server 2005, которую обслуживает служба, является локальной. Во время этого процесса хост-служба WCF Data Service израсходует около 1,2 ГБ.

Есть идеи? Большое спасибо заранее!

1 Ответ

0 голосов
/ 30 ноября 2011

Вам действительно нужно изменить все объекты в одной транзакции? Если нет, то я бы предложил сделать контекст данных открытым как можно скорее.

  • Открыть контекст данных
  • обновить объект
  • сохранить изменения
  • закрыть контекст данных
...