¿La biblioteca paralela de tareas proporciona una forma de agrupar conexiones abiertas?

Antecedentes

Tengo un servicio que se conecta a Microsoft CRM 2011 y actualiza decenas de miles de registros. Ejecutarlo con un solo subproceso da como resultado que solo se actualicen 30 registros en un minuto en nuestro entorno de desarrollo. Cambié a subprocesos múltiples usando TPL Parallel.Inovke, pero la conexión a CRM no es segura para subprocesos, por lo que estaba creando una nueva conexión para cada registro que estaba procesando. Este cambio solo aumentó mi rendimiento a 60 registros por minuto. Luego volví y junté los registros por lotes, de modo que cada subproceso abriera una conexión y luego procesara 1000 registros a la vez. Esto aumentó mi rendimiento a alrededor de 500 actualizaciones por minuto. Podría continuar por este camino e intentar ajustar el tamaño de mi lote con la cantidad de subprocesos, pero la solución real es realizar algún tipo de agrupación de conexiones, de modo que cada subproceso tenga su propia conexión.

¿Cómo realizar la agrupación de conexiones?

¿TPL proporciona una forma de pasar objetos de una Acción que está finalizando a la siguiente Acción que se va a procesar? Si no, ¿hay un buen ejemplo en alguna parte de cómo escribir su propia clase de agrupación de conexiones?

preguntado el 03 de mayo de 12 a las 14:05

1 Respuestas

Creo que no hay nada como esto en TPL, no es su trabajo proporcionar agrupación de conexiones.

Pero una forma de hacer esto sería usar una de las sobrecargas de Parallel.ForEach(), que admite la inicialización local de subprocesos.

contestado el 03 de mayo de 12 a las 14:05

Entonces, ¿crear la conexión en la inicialización del hilo? ¿Cómo administro el alcance de esa conexión? Una vez que se haya completado la acción, ¿el subproceso simplemente procesará la siguiente acción o se creará un nuevo subproceso? - Daryl

Una vez que se completa una acción, se inicia otra en el mismo hilo, con la misma conexión. - svick

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.