Большое приложение с использованием Entity framework и WCF

Мы разрабатываем большое приложение ASP.NET. Приложение использует следующее:

  • Entity framework как уровень доступа к данным.
  • WCF в качестве коммуникационного уровня, который использует ChannelFactory для создания каналов (каждый вызов имеет новый канал), службы WCF размещаются в службах Windows и используют WSHttpBinding.
  • SQL Server 2008 R2

  • Иногда мы используем TransactionScope на бизнес-уровне для создания транзакций.

  • База данных содержит большое количество данных, которые передаются через WCF.
  • Весь наш Entity Framework ObjectContext заключен внутри с помощью statemnt, чтобы гарантировать их удаление.
  • Каждый канал WCF удаляется после его использования.
  • У нас есть длительные транзакции, работающие в фоновом режиме, которые содержат множество и частый доступ к базе данных, в том числе через WCF.

В основном у нас есть две критические проблемы:

  • у нас какая-то утечка памяти. Память хоста службы WCF постоянно увеличивается, особенно с большими данными.
  • Память SQL-сервера также увеличивается и увеличивается.

Эти проблемы делают приложение очень медленным и иногда не отвечают, что вынуждает нас перезапускать службы wcf и sql.

Приложение размещено в среде Windows Server 2008 с 4 ГБ ОЗУ.


person Ghyath Serhal    schedule 16.06.2011    source источник
comment
Сколько пользователей и с каким объемом памяти вы имеете дело, есть ли у вас статистика профайлера?   -  person V4Vendetta    schedule 16.06.2011
comment
У нас 4 Гб оперативной памяти и количество пользователей около 6, 7.   -  person Ghyath Serhal    schedule 16.06.2011
comment
SQL Server, оставленный на отдельной машине, всегда будет захватывать столько памяти, сколько ему нужно/сколько он может получить. Это нормальное, ожидаемое поведение - нет причин для беспокойства (и именно поэтому SQL Server лучше всего иметь свой собственный эксклюзивный сервер)   -  person marc_s    schedule 16.06.2011
comment
Я пробовал этот сценарий, у меня все еще была та же проблема.   -  person Ghyath Serhal    schedule 16.06.2011
comment
У меня был подобный опыт .. вы проследили по шагам? по нашему опыту, это было связано с исправлениями, сделанными EF. Я так и не нашел решения, кроме удаления контекста и его воссоздания.   -  person hanzolo    schedule 09.03.2012
comment
точно не нашел проблему. Что вы имеете в виду под удалением контекста и его воссозданием?   -  person Ghyath Serhal    schedule 09.03.2012


Ответы (1)


Надеюсь, это поможет вам начать:

  1. Проверьте диагностику WCF, если есть какое-либо исключение или непредвиденное поведение.
  2. Затем используйте немного памяти инструменты профилирования, чтобы увидеть, какие объекты остаются в памяти хоста WCF.
  3. Убедитесь, что соединение с MS SQL закрыто и правильно удалено для каждого запроса.
  4. Проверьте, не кэшируете ли вы данные, и убедитесь, что старых данных не осталось.
  5. Профиль MS SQL.
person oleksii    schedule 16.06.2011