2010-08-16 101 views
0

我正在开发一个Web应用程序,需要执行消耗大量CPU和内存的任务,而且这可能会持续几分钟。为了获得更好的用户体验,我还开发了一个Windows服务,它承载执行此“高成本”任务的WCF服务,并使用msmq(消息队列)与Web应用程序进行通信。限制WCF服务资源的使用

这很好,直到我试图做一个负载测试... Windows服务开始消耗大量的资源,推迟CPU工作在100%和超过1GB的内存。我寻找优化,并且对代码做了很多调整,我认为它非常高效,但是这项任务只需要大量资源。

问题是,虽然WCF服务正在工作,CPU得到100%使用和Web应用程序变得不可思议的慢!我不介意WCF服务的任务需要花费几分钟的时间,但我希望Web应用程序能够很好地满足用户的需求。

所以我想知道是否有一种方法来限制WCF服务可以使用的资源,并给予Web应用程序优先级。

在此先感谢。

胡安

回答

0

最简单的解决办法是把WCF服务在不同的机器上。

服务使用很多CPU的事实可能与您使用WCF无关。

有一些方法,你也许能改善你的web应用程序的性能:

  • 只处理一次一个消息。
  • 将作业分成较小的部分。
  • Windows服务至低于正常在任务管理器
  • 的设置优先级安装更多的RAM服务器
0

上我想这是你的Windows服务设计的问题。当你决定在Windows服务中托管WCF时,你必须控制资源利用率=你必须控制节流。您必须创建内部服务处理的可配置控制,以便您可以根据可用资源更改负载。如果你在IIS中托管WCF,它已经在AppPool级别上提供了这种控制。

有一些免费软件工具允许限制给定进程的CPU使用率,但这不是我推荐的生产用途。

此致敬礼拉迪斯拉夫