【发布时间】:2011-06-16 10:30:04
【问题描述】:
我们正在开发一个大型 ASP.NET 应用程序。该应用程序使用以下内容:
- 实体框架作为数据访问层。
- WCF 作为通信层,使用 ChannelFactory 创建通道,(每个调用都有一个新通道),WCF 服务托管在 Windows 服务中并使用 WSHttpBinding。
SQL Server 2008 R2
有时,我们在业务层使用 TransactionScope 来创建事务。
- 数据库包含大量数据,通过 WCF 传递。
- 我们所有的 Entity Framework ObjectContext 都使用 statemnt 包装在内部,以确保它们被释放。
- 每个 WCF 通道在使用后都会被释放。
- 我们有在后台运行的长时间运行的事务,其中包含许多也通过 WCF 频繁访问的数据库。
主要有两个关键问题:
- 我们有某种内存泄漏。 WCF 服务主机的内存不断增加,尤其是在处理大数据时。
- SQL 服务器的内存也越来越大。
这些问题导致应用程序很慢,有时没有响应,迫使我们重新启动wcf和sql服务。
该应用程序托管在具有 4 GB RAM 的 Windows Server 2008 环境中。
【问题讨论】:
-
有多少用户和你正在处理的内存量,你有任何分析器统计信息吗?
-
我们有 4 GB 的 RAM,用户数量约为 6、7。
-
SQL Server - 单独留在机器上 - 总是会尽可能多地获取它需要/可以获得的内存。这是正常的预期行为 - 无需担心(这就是为什么最好使用 SQL Server 自己的专用服务器机器)
-
我试过这个方案,我还是有同样的问题。
-
我也有过类似的经历。。你查过这些步骤吗?根据我们的经验,它与 EF 所做的“修复”有关。除了删除上下文并重新创建它之外,我从未找到解决方案。
标签: c# wcf visual-studio-2010 entity-framework .net-4.0