【发布时间】:2016-01-28 21:23:39
【问题描述】:
我创建了一个简单的 WCF 服务,其方法是 Do work,它会休眠 15 秒,然后返回一个字符串。它是一个具有多个并发的单例服务。
客户端(.net 桌面应用程序)有一个 100 的 for 循环来调用此函数。我想看看我一次可以处理多少个线程并提高性能。
我正在使用 NetTCP 绑定并添加了性能参数
服务器配置
<services>
<service name="WCFService.WCFService" behaviorConfiguration="mexbahaviour">
<endpoint address="WCFService" binding="netTcpBinding" contract="WCFService.IWCFService" ></endpoint>
<endpoint address="WCFService" binding="netNamedPipeBinding" contract="WCFService.IWCFService" ></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" ></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8090/ "/>
<add baseAddress="net.tcp://localhost:8091/ "/>
<add baseAddress="net.pipe://localhost/ "/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="mexbahaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceThrottling maxConcurrentCalls="300" maxConcurrentSessions="300"
maxConcurrentInstances="600" />
</behavior>
</serviceBehaviors>
</behaviors>
问题是请求没有足够快地到达服务器。初始秒有 4 个请求,但之后每秒有 2 个请求。 The output window on service looks like this.
因此,每当请求到达服务时,都会创建一个新线程,并记录它的接收时间和进入睡眠状态。
我在客户端添加了连接管理部分
<connectionManagement>
<add address="*" maxconnection="100"/>
</connectionManagement>
是线程创建造成的延迟吗?还是我遇到的一些服务限制限制?
请就我的工作提出建议。
我也尝试使用这篇文章来实现 Boost WCF Performance
【问题讨论】:
-
Source Code。它具有用于测试的服务和客户端代码。
标签: c# .net performance wcf threadpool