ОБНОВЛЕНИЕ: я использовал Threading для разделения Loop в количестве ядер (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();
}
Parallel:
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 не сэкономит время.