2011-06-16 114 views
3

我们正在开发一个大型ASP.NET应用程序。该应用程序使用以下内容:使用实体框架和WCF的大型应用程序

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

  • 有时候,我们使用的TransactionScope在业务层以创建交易。

  • 数据库包含大量的数据,通过WCF传递。
  • 我们所有的实体框架ObjectContext使用statemnt封装在内部,以确保它们被丢弃。
  • 每个WCF通道都在使用后处理。
  • 我们有很长时间的运行在后台运行的事务,其中包含许多频繁的数据库访问也通过WCF。

主要有两个关键问题:

  • 我们有某种内存泄漏。 WCF服务主机的内存不断增加,特别是对于大数据。
  • SQL服务器的内存也增加了。

这些问题使应用程序非常缓慢,有时不响应,迫使我们重新启动wcf和sql服务。

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

+0

多少用户和whatz的你正在处理内存,量你有什么探查统计? – V4Vendetta 2011-06-16 10:37:54

+0

我们有4 GB的RAM和用户数大约是6,7 – 2011-06-16 10:39:44

+3

SQL服务器 - 独自留在自己的机器上 - 因为它需要/因为它可以得到永远抓住尽可能多的内存。这是正常的,预期的行为 - 没有理由担心(这就是为什么SQL Server的最好给自己的,独特的服务器机) – 2011-06-16 10:40:55

回答

3

希望这将让你开始:

  1. 检查WCF diagnostics,如果有任何异常或意外行为。
  2. 然后使用一些内存profiling tools来查看哪些对象留在WCF主机内存中。
  3. 验证与MS SQL的连接是否按照请求方式关闭并妥善处置
  4. 检查您是否正在执行任何数据高速缓存并验证是否没有旧数据。
  5. Profile MS SQL。
相关问题