ОБНОВЛЕНИЕ: я использовал потоки, чтобы разделить цикл по количеству ядер (8 в моем случае), и полный цикл прошел менее чем за 1 секунду . Так что проблема не в том, что операция не быстрее с потоками. Почему в этом случае не удалось выполнить расширение Parralel?
Всем привет. Я хочу преобразовать свой ForEach с помощью Parrallel.Foreach. Проблема в том, что парралелизация не приносит мне никаких преимуществ.
Оригинал:
foreach (Entities.Buchung buchung in buchungen) {
Int32 categoryID = manager.GetCategoryID(new Regelengine.Booking(buchung)); // Average 4ms
buchung.Category = categoryID.ToString();
}
Параллельный:
System.Threading.Tasks.Parallel.ForEach(buchungen, buchung => {
Int32 categoryID = manager.GetCategoryID(new Regelengine.Booking(buchung));
buchung.Category = categoryID.ToString();
});
Результаты:
---------------------------
Stopwatched Results for 1550 entries in the List:
---------------------------
Parallel.Foreach 00:00:07.6599066
Average Foreach: 00:00:07.9791303
Может быть проблема в том, что фактическое действие в цикле такое короткое? Но никто не может сказать мне, что распараллеливание 1550 операций на Intel I7 не сэкономит времени.