我们正在开发一个大型 ASP.NET 应用程序。该应用程序使用以下内容:
- 作为数据访问层的 Entity Framework 。
- WCF 作为通信层,使用 ChannelFactory 来创建 channel (每次调用都有一个新 channel ),WCF 服务托管在 Windows 服务中并使用 WSHttpBinding。
SQL Server 2008 R2
有时,我们在业务层使用 TransactionScope 来创建交易。
- 数据库包含大量数据,通过 WCF 传递。
- 我们所有的 Entity Framework ObjectContext 都使用 statemnt 包裹在里面以确保它们被释放。
- 每个 WCF channel 在使用后被释放。
- 我们有在后台运行的长期事务,其中包含许多还通过 WCF 进行的频繁数据库访问。
主要有两个关键问题:
- 我们有某种内存泄漏。 WCF 服务主机的内存不断增加,尤其是对于大数据。
- SQL Server 的内存也越来越大。
这些问题使得应用程序非常缓慢,有时甚至没有响应,这迫使我们重新启动wcf和sql服务。
该应用程序托管在具有 4 GB RAM 的 Windows Server 2008 环境中。
最佳答案
希望这能让你开始:
- 检查 WCF diagnostics ,如果有任何异常或意外行为。
- 然后使用一些内存profiling tools查看哪些对象保留在 WCF 主机内存中。
- 验证与 MS SQL 的连接已关闭并按请求方式正确处理
- 检查您是否在进行任何数据缓存,并确认没有留下任何旧数据。
- Profile微软 SQL。
关于c# - 使用 Entity Framework 和 WCF 的大型应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370418/