正如标题所说,我得到了一个定义了此服务行为的 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。