Мы разрабатываем большое приложение 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 ГБ ОЗУ.