Como dice el título, tengo un servidor WCF tener este comportamiento en servicio definido:WCF aumento de uso de la CPU en un 25% para cada cliente
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
I' mediante la unión de una tubería con nombre y mis clientes se están conectando en este manera:
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()
cada cliente empiezo ejecuta el código anterior, y para cada cliente el uso de la CPU aumenta en un 25% (en realidad no fuera por el 5. cliente, pero en este punto el execteable servicio está cubriendo casi un 100 % de la capacidad total de la CPU).
Lo que estoy buscando es un tipo de recurso (sitio web/lista o simplemente SU conocimiento poderoso) que me dice qué hace realmente CreateChannel (con respecto a cuestiones de asignación de recursos).
sugerencia: el uso de la CPU aumenta incluso si no se realiza ninguna comunicación, solo se crea el canal.
Predigo que tiene 4 núcleos y algo girando en un circuito cerrado. – tzerb
Aprenda a usar su depurador y/o perfilador de CPU. –
realmente tienes razón tzerb. 4 núcleos y algunos, no encontrados hasta ahora, pequeño bucle ... – inva