¿SNIReadSyncOverAsync y WaitForSingleObject bloquean el rendimiento de EF?

Estoy haciendo algunos perfiles en un servicio WCF que utiliza EF (System.Data.Entities) para leer desde una base de datos SQL. Cuando enciendo varios clientes paralelos que llegan al servicio, todas las CPU van al 100%, el rendimiento en general se agota y todo se atasca.

Al perfilar esto con el generador de perfiles de concurrencia, encontré que el 85% del tiempo se dedica a la sincronización, con solo alrededor del 4% de ejecución de código real. Al profundizar en el seguimiento de la pila, la mayoría de la sincronización parece ser desde una llamada a WaitForSingleObject en System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync. La pila muestra que la llamada va a un contenedor de método nativo, y luego termina en kernel32.dll! _WaitForSingleObject.

¿Alguien ha experimentado esto antes? ¿Hay alguna manera de hacer algo al respecto? Realmente no estoy lanzando una carga absurda a esto, solo unos 20 clientes paralelos, y todo es de solo lectura, así que me sorprende que los hilos incluso se molesten en sincronizar.

He estado peleando con esto por una semana y no puedo explicarlo. ¡Cualquier ayuda sería apreciada!

Respuestas a la pregunta(1)

Su respuesta a la pregunta