我正在对自托管nettcp WCF服务进行基准测试,从50个线程向位于同一台计算机上的服务发出请求。问题是Xeon E3-1270的CPU利用率从未超过35%。当我在两核笔记本电脑上运行相同的测试时,它确实达到了100%。
WCF方法不执行任何操作,因此不应受IO限制。我试图增加线程数,但这没有用。每个线程都创建一个服务通道,并执行重用该通道实例的数千个调用。
这是我正在使用的服务类:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class TestService : ITestService
{
public void Void()
{
// DO NOTHING
}
}
CONFIGS:
ServiceThrottlingBehavior: MaxConcurrentCalls = 1000 MaxConcurrentInstances = 1000, MaxConcurrentSessions = 1000
NetTcpBinding的 ListenBacklog = 2000 MaxConnections = 2000
答案 0 :(得分:1)
我会尝试将InstanceContextMode更改为 PerCall 。我很确定您的当前配置设置将被忽略,因为WFC只会创建一个类的单个实例并按顺序处理它们。使用PerCall,将为每个请求创建一个新实例,直到达到最大线程数或配置限制。您也不需要netTcpBinding设置,但要保持您的限制行为,但要确保您的比例正确,否则可能会产生不利影响。