Большое приложение, использующее Entity Framework и WCF - PullRequest
3 голосов
/ 16 июня 2011

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

  • Структура сущности как слой доступа к данным.
  • 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 ГБ.

1 Ответ

3 голосов
/ 16 июня 2011

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

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