2012-04-24 8 views
5

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.

+5

Predigo que tiene 4 núcleos y algo girando en un circuito cerrado. – tzerb

+0

Aprenda a usar su depurador y/o perfilador de CPU. –

+0

realmente tienes razón tzerb. 4 núcleos y algunos, no encontrados hasta ahora, pequeño bucle ... – inva

Respuesta

1

Es improbable que WCF use tantos recursos, especialmente dado que dijo que esto sucede incluso cuando no hay comunicación. Supongo que es un problema con el servicio y no con los clientes. Mire el constructor del servicio si tiene uno. También experimente con diferentes valores de InstanceContextMode y ConcurrencyMode.

+0

era un problema con el dll administrado por mi servicio ... en realidad no hay problema con el cliente. – inva

3

Pausa el depurador y ver dónde se han detenido todos los subprocesos. Esta es probablemente la parte más importante de tu código. Mira la pila de llamadas.