2012-01-05 7 views
6

He estado trabajando en una prueba de concepto utilizando WCF y MSMQ. He estado jugando con la configuración del acelerador usando los valores predeterminados This Article y también agregando mis propias configuraciones al archivo de configuración. Tengo 2 CPU Quad Core Xeon ejecutando esta aplicación. Independientemente de la configuración que aplique, siempre aparece solo 8 mensajes a la vez (lo que coincide con mis núcleos de procesamiento). Quiero que cada uno de los mensajes se maneje en una sola transacción, por lo que podría ser parte del problema ... no estoy seguro. Supongo que manejará muchos más mensajes al mismo tiempo de lo que es.Configuraciones del acelerador WCF

comportamiento en servicio:

[ServiceBehavior(UseSynchronizationContext = true, 
        ReleaseServiceInstanceOnTransactionComplete=true, 
        ConcurrencyMode = ConcurrencyMode.Single, 
        InstanceContextMode = InstanceContextMode.PerCall)] 

punto final Comportamiento:

<endpointBehaviors> 
    <behavior name="endpointBehavior"> 
     <transactedBatching maxBatchSize="1" /> 
    </behavior> 
    </endpointBehaviors> 

Mi propia aplicación de estrangulamiento:

<serviceThrottling maxConcurrentCalls="128" maxConcurrentSessions="800" /> 

estoy pasando por alto algo? Tal vez simplemente no entiendo completamente la configuración predeterminada/personalizada del acelerador (Probable).

EDITAR

He modificado el ConcurrencyMode (Cambiado a Múltiple), junto con el ajuste ReleaseServiceInstanceOnTransactionComplete. ¿Cambiar a Múltiple no pareció cambiar nada?

EDIT ¿Es quizás la configuración de TransactionBatch? Tengo ese conjunto a uno ...?

Gracias,

S

+0

¿No es esto de un solo subproceso? –

+0

Hola @JohnBreakwell He cambiado el modo de concurrencia a Múltiple y parecía estar dando los mismos resultados. – scarpacci

Respuesta

4

he encontrado un blog que me señaló a una buena documentación sobre WCF estrangulación/rendimiento. Agregué un poco más de salida meta a mi aplicación de procesamiento y pude obtener el rendimiento que estaba buscando. Al agregar más información a mi proceso (ManagedThreadID, etc.), pude ver que obtenía mucho más rendimiento de lo que había supuesto originalmente. También encontré algunos de los consejos en el blog a continuación para ser útil.

Blog

Gracias,

S

0

Puesto que usted está ejecutando PerCall de instancias debe aumentar MaxConcurrentInstances. Incluso en .Net 4 el valor predeterminado es 26. En 4.5 "El valor predeterminado es la suma del valor predeterminado de MaxConcurrentSessions y el valor predeterminado de MaxConcurrentCalls .."

BTW ... WCF llamará a su instancia en varios hilos a menos que esté utilizando InstanceContextMode.PerCall. InstanceContextMode.PerCall + Any ConcurrencyMode = N invocaciones concurrentes del método en N instancias de servicio, donde N está determinado por el acelerador de servicio Reference

+0

Creo que lo que dijiste sobre PerCall/Single thread es incorrecto. Todas las instancias de servicio se crearán en el mismo subproceso y se ejecutarán de forma sincrónica. Puede verlo usted mismo en la [captura de pantalla aquí] (http://www.codeproject.com/KB/WCF/WCFConcurrency.aspx#Instance mode = per Call and Concurrency = Multiple).Esa publicación en el blog es muy útil y vale la pena leerla. –

+0

hmmmmmm solo estaba repitiendo declaraciones de esa referencia al final de mi comentario. – felickz

Cuestiones relacionadas