1

我正在编写利用WCF和NetTCP服务的企业级应用程序。我最初出于好奇而选择了NetTCP,但后来确定它是我的最佳选择,因为我可以使用称为服务的服务,因为所涉及的数据处理量大,需要5个多小时才能返回结果。WCF自我托管性能

我目前产生我的服务的方式是一个多步骤的过程。我有一个配置部分(使用System.Configuration),它指定了一些默认的东西(端口号,连接客户端的服务器名称,是否启用HTTP以及NetTCP等),并且具有下面的“服务”集合它。例如,这里有一个基本的样子:

<serverConfiguration tcpListenerPortNumber="60000" httpGetEnabled="true" httpListenerPortNumber="6000" serverName="localhost" retryEnabled="true" retryInterval="5" maxRetryAttempts="3"> 
    <services> 
     <add virtualDirectory="Service1" applicationName="Service1" assembly="SampleService" type="SampleService.Service1" />    
    </services> 
</serverConfiguration> 

基本上这里发生了什么是我的Windows服务揭开序幕,并期待在<服务/ >集合中的一切,产卵关每个服务加快启动时间线并且每个线程都包含一个AppDomain,服务真正在其中存在,因此如果服务出现某种故障,它不会导致系统停机。

我遇到的“问题”是这个应用程序托管了大约20个服务,并且需要15-20秒才能启动和运行所有服务。我做了线程和AppDomain部分,以便将其降低到该值(每次服务按顺序打开时用于占用一分钟),但在我看来,这实际上可能会快得多。

任何人有任何建议吗? Google Bing有大量的托管一个服务的例子,但我没有找到真正的应用程序(遗憾的是“Hello World”只是不吸引最终用户)。如果您目前通过Windows服务和NetTCP托管多项服务,那么您最近怎么做?

+0

它需要比这更快吗?如果它每天只启动一次,那么这是每天20秒。这不是很长时间。 – 2009-06-20 20:58:07

+0

这主要是在调试过程中,它比较慢,所以这是我试图挤出性能的主要区域。服务本身将无限期地运行(减去重启等等)。 – RubyHaus 2009-06-21 21:50:57

回答

1

我终于明白了,它毕竟与WCF或我的配置无关。当我创建AppDomain时,我偷走了另一个项目的代码,该项目的规模小得多,发现创建AppDomain的部分使用的是SingleDomain选项。将其更改为MultiDomain使总负载和内存使用量从大约150MB下降到〜40MB大于4秒。

感谢您的帮助,但至少它让我重新审查了代码!

0

我有三个建议:

首先,如果呼叫可以采取5+小时,我会考虑的排队/自动回叫风格的建筑。

考虑将您的服务分成20个windows服务,其中每个服务运行在它自己的windows服务中。这增加了复杂性并增加了内存使用量,但个别服务可能会更快。

最后,检查服务的consructor中的代码,查看是否有任何不需要的代码。