2010-06-04 27 views
6

Me han pedido que muestre los beneficios y las limitaciones de Parallelism y lo evalúe para su uso dentro de nuestra compañía. Principalmente somos un negocio orientado a los datos, y básicamente cargamos objetos de la base de datos, luego los ponemos a través de una lógica de negocios, los mostramos al usuario y luego los guardamos nuevamente en la base de datos. En mi opinión, no hay mucho en esa línea de tubería que se beneficiaría de correr en paralelo, pero siendo bastante nuevo en el concepto, podría estar completamente equivocado. ¿Habría alguna parte de esa tubería simple que se beneficiaría si se ejecutara en paralelo? ¿Y hay alguna guía sobre cómo implementar este estilo de programación?Paralelismo en .Net

Además, ¿hay alguna herramienta (preferiblemente incluida con VS2010) que muestre dónde se producen los cuellos de botella y podría mostrar visualmente lo que está sucediendo cuando hago clic en "Ir" en una aplicación simple que ejecuta una cantidad determinada de bucles (bucles matemáticos simples pre-escritos, por ejemplo, para i como entero = 1 a 1000 - hacer algunos cálculos) en paralelo, luego en serie?

Necesito ser capaz de mostrar la diferencia usando una herramienta de perfil decente.

Respuesta

4

Sí, incluso a partir de ese modelo simple podría beneficiarse en gran medida de del paralelismo.

Digamos por ejemplo que durante una carga de los datos de que estás haciendo algo como esto:

foreach(var datarow in someDataSet) 
{ 
    //put your data into some business objects here 
} 

que podría optimizar esto con parrallelism haciendo algo como esto:

Parrallel.ForEach(someDataSet, datarow => 
{ 
    //put your data into some business objects here 
}); 

Esto podría aumenta mucho tu rendimiento dependiendo de la cantidad de datos que procesa aquí.

Cada fila de datos ahora se procesará de forma asíncrona en lugar de secuencialmente como el ciclo foreach típico.

Mi sugerencia para usted sería realizar algunas pruebas de rendimiento simples en un ejemplo tan simple como este y ver qué tipo de resultados obtiene. Trazarlo en una hoja de cálculo o algo así, y muéstraselo a tu equipo. Es posible que se sorprenda con los resultados que obtiene.

+0

Gracias @Joseph. Me pregunté si el Parallel.ForEach mejoraría incluso un simple bucle de objetos. He creado una aplicación que traza los resultados del tiempo en función de algunos bucles que he creado y ejecuto estos bucles en función de los núcleos para ejecutar y si se ejecutan en series paralelas y las muestran en un .NET 4.0 VS2010 Chart. Mi jefe, sin embargo, quiere que use una herramienta de generación de perfiles existente para mostrar lo que ocurre detrás de escena. ¿Hay alguna herramienta para mostrar esto de manera efectiva? – Ben

+0

@Ben ANTS Profiler es una buena herramienta para verificar el rendimiento, pero es solo una de muchas. De hecho, hay preguntas sobre SO sobre herramientas de rendimiento que probablemente tendrían una lista más completa para usted. – Joseph

1

Puede obtener más beneficios al implementar una capa de almacenamiento en caché (distribuida o no) que paralelizar su canalización actual.

Con una capa de almacenamiento en caché, los objetos que utiliza con frecuencia residirán en la memoria caché en memoria, lo que permite un rendimiento de lectura/escritura mucho mayor. Hay varias opciones para mantener el caché sincronizado, y esto variará según el proveedor que elija.

Sugiero echar un vistazo a MemCached y NCache y ver si crees que serían una buena opción.

EDITAR: En cuanto a las herramientas de creación de perfiles, he usado dotTrace ampliamente y lo recomiendo encarecidamente. Puede descargar una versión de prueba de 30 días del sitio web de JetBrains.

0

¿Has echado un vistazo al sitio de Microsoft Parallel Computing with Managed Code? Contiene varios artículos sobre las pautas de implementación que analizan cuándo y cómo usar las características paralelas de .Net 4.

1

Posiblemente, pero mi respuesta general a este tipo de consulta sería típicamente - ¿Tiene problemas con el rendimiento de su aplicación (s)? En caso afirmativo, entonces, por supuesto, investigue por qué y considere si la ejecución en paralelo puede ayudar. Si no, entonces el tiempo probablemente sea mejor gastado en otro lugar.

Cuestiones relacionadas