每个客户端的WCF CPU使用率增加25%

时间:2012-04-24 15:53:12

标签: c# .net wcf

正如标题所说,我得到了一个定义了这种服务行为的WCF服务器:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

我使用命名管道绑定,我的客户端以这种方式连接:

    NetNamedPipeBinding binding = new NetNamedPipeBinding();
const int maxValue = 0x40000000; // 1GB
binding.MaxBufferSize = maxValue; 
binding.MaxReceivedMessageSize = maxValue;

binding.ReaderQuotas.MaxArrayLength = maxValue;
binding.ReaderQuotas.MaxBytesPerRead = maxValue;
binding.ReaderQuotas.MaxStringContentLength = maxValue;

// receive timeout acts like a general timeout
binding.ReceiveTimeout = TimeSpan.MaxValue;
binding.SendTimeout = TimeSpan.MaxValue;

ChannelFactory<IDatabaseSession> pipeFactory = new ChannelFactory<IDatabaseSession>(binding, new EndpointAddress("net.pipe://localhost/DatabaseService"));

IDatabaseSession dbSession = pipeFactory.CreateChannel()

我开始运行的每个客户端执行上面的代码,并且对于每个客户端,CPU使用率提高了25%(实际上不是用于5.客户端,但此时服务可执行程序覆盖了整个CPU容量的近100% )。

我正在搜索的是一种资源(网站/列表或只是您强大的知识),告诉我CreateChannel实际上做了什么(关于资源分配问题)。

提示:即使没有实际进行通信,CPU使用率也会增加,只创建了Channel。

2 个答案:

答案 0 :(得分:3)

暂停调试器并查看所有线程停止的位置。这可能是您代码的热门部分。看看调用堆栈。

答案 1 :(得分:1)

WCF本身不太可能使用那么多资源,特别是因为你说即使没有通信就会发生这种情况。我的猜测是服务而不是客户端存在问题。如果有服务构造函数,请查看服务构造函数。同时尝试使用InstanceContextModeConcurrencyMode的不同值。