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

本文关键字:使用率 增加 CPU WCF 客户端 | 更新日期: 2023-09-27 18:32:03

正如标题所说,我得到了一个定义了此服务行为的 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 使用率也会增加,只会创建通道。

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

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

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