更新:我使用线程将循环分割成内核数量(我的情况下为8),整个循环在不到1秒的时间内完成。 因此,问题不在于使用线程操作速度没有提高。为什么并行扩展在这种情况下失败了?
大家好。我想使用Parrallel.Foreach来转换我的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
也许问题在于循环中实际操作非常短?但没有人能告诉我,在Intel I7上并行执行1550个操作不会节省任何时间。
Regelengine
里可能有一个锁。 - leppiemanager.GetCategoryID
中发生了什么?构造函数new Regelengine.Booking
中发生了什么? - AakashM