ACTUALIZACIÓN: utilicé Threading para dividir el Loop en la Cantidad de Kernels (8 en mi Case) y el Loop completo pasó en menos de 1 segundo. Entonces, el problema no es que la Operación no sea más rápida con el enhebrado. ¿Por qué Parralel Extension falló en este caso?Parallel.Foreach tan rápido/lento como normal ForEach
Hola a todos. Quiero convertir mi ForEach con Parrallel.Foreach. El problema es que la parralelisation apenas aporta ninguna ventaja para mí.
original:
foreach (Entities.Buchung buchung in buchungen) {
Int32 categoryID = manager.GetCategoryID(new Regelengine.Booking(buchung)); // Average 4ms
buchung.Category = categoryID.ToString();
}
paralelas:
System.Threading.Tasks.Parallel.ForEach(buchungen, buchung => {
Int32 categoryID = manager.GetCategoryID(new Regelengine.Booking(buchung));
buchung.Category = categoryID.ToString();
});
Resultados:
---------------------------
Stopwatched Results for 1550 entries in the List:
---------------------------
Parallel.Foreach 00:00:07.6599066
Average Foreach: 00:00:07.9791303
Tal vez el problema es, que la acción real en el bucle es tan corto? Pero nadie puede decirme que la paralelización de las 1550 operaciones en un Intel I7 no ahorrará tiempo.
Probablemente hay un bloqueo en esa cosa 'Regelengine'. – leppie
La pregunta es: ¿el método dentro de la declaración se beneficia del paralelismo? Lo siguiente que no sé es qué hace GetCategoryID. ¿Hay una llamada a la base de datos que podría ser el cuello de botella y evitar que el código use multihilo? – sprinter252
¿Qué sucede en el método 'manager.GetCategoryID'? ¿Qué sucede en el ctor 'new Regelengine.Booking'? – AakashM