C# 使用实体框架和WCF的大型应用程序

C# 使用实体框架和WCF的大型应用程序,c#,wcf,visual-studio-2010,entity-framework,.net-4.0,C#,Wcf,Visual Studio 2010,Entity Framework,.net 4.0,我们正在开发一个大型ASP.NET应用程序。该应用程序使用以下选项: 实体框架作为数据访问层 WCF作为一个通信层,使用ChannelFactory创建通道(每个调用都有一个新通道),WCF服务托管在windows服务中,并使用WSHttpBinding SQL Server 2008 R2 有时,我们在业务层中使用TransactionScope来创建事务 数据库包含大量通过WCF传递的数据 我们所有的实体框架ObjectContext都使用statemnt包装在里面,以确保它们被释放 每个

我们正在开发一个大型ASP.NET应用程序。该应用程序使用以下选项:

  • 实体框架作为数据访问层
  • WCF作为一个通信层,使用ChannelFactory创建通道(每个调用都有一个新通道),WCF服务托管在windows服务中,并使用WSHttpBinding
  • SQL Server 2008 R2

  • 有时,我们在业务层中使用TransactionScope来创建事务

  • 数据库包含大量通过WCF传递的数据
  • 我们所有的实体框架ObjectContext都使用statemnt包装在里面,以确保它们被释放
  • 每个WCF信道在使用后被处理
  • 我们有在后台运行的长时间事务,其中包含许多也通过WCF频繁访问的数据库。
我们主要有两个关键问题:

  • 我们有某种内存泄漏。WCF服务主机的内存不断增加,尤其是对于大数据
  • SQL server的内存也在不断增加
这些问题使得应用程序非常缓慢,有时没有响应,这迫使我们重新启动wcf和sql服务


该应用程序托管在具有4 GB RAM的windows server 2008环境中。

希望这能让您开始:

  • 如果存在任何异常或意外行为,请检查
  • 然后使用一些内存查看哪些对象保留在WCF主机内存中
  • 验证与MS SQL的连接是否已关闭,并按照每个请求的方式正确处理
  • 检查您是否正在进行任何数据缓存,并确认没有遗留旧数据
  • SQL女士

  • 有多少用户以及您正在处理的内存量,您有任何profiler统计数据吗?我们有4 GB RAM,用户数量约为6,7。SQL Server—单独留在一台机器上—将始终获取所需/所能获得的内存。这是正常的、预期的行为-没有理由担心(这就是为什么SQL Server最好有自己的、专用的服务器机器)我尝试过这个场景,但仍然有同样的问题。我有过类似的经历。。你有没有跟踪这些步骤?根据我们的经验,这与EF所做的“修正”有关。。除了删除上下文并重新创建它之外,我从未找到解决方案。