c# - Parallel.Foreach 比 C# 中的普通 foreach 花费更多时间

标签 c#

下面是我在 Parrrllel.Foreach 中使用的代码。但它与正常的 foreach 花费的时间相同。这里的filingDataItems、nonPeriodic、periodiccells都是数据表。发生这种情况是由于数据表吗?

System.Threading.Tasks.Parallel.ForEach(tempfilingReferences, T2 =>
            {                             
                    Filing f = new Filing(
                                         T2.Id,
                                         T2.DocumentPeriod,
                                         T2.FilingDate,
                                         T2.VersionId,
                                         T2.DocumentId,
                                         T2.PrimaryPeriodTypeId,
                                         T2.IssuedAsPreliminaryFlag,
                                         T2.IssuedAsAmendmentFlag,
                                         T2.FilingDetails,
                                         T2.CompanyId,
                                 GetFilingDataItems(filingDataItems, T2.Id, nonPeriodic, periodiccells, filingToPeriodList, DPTPList, posList),
                                 GetPeriods(filingToPeriodList, periodInfoList, T2.Id),
                                 GetFilingToPeriods(filingToPeriodList, T2.Id),
                                         true,
                                         false,
                                         AuditedDataType.Financials,
                                         T2.FilingTypeList
                               );


                        lock (filingListnew)
                        {
                                filingListnew.Add(f);
                        }
            });

最佳答案

您正在锁定平行部分。 因此,您在每个线程中等待事件线程移除锁。 所以这与顺序 foreach 几乎相同。

例如:

并行.Foreach:

周期1

线程1:filingListnew.Add(Object1);

线程2:已锁定

线程3:已锁定

线程4:已锁定

周期2

线程1:已锁定

线程2:filingListnew.Add(Object2);

线程3:已锁定

线程4:已锁定

周期3 ...

“正常”foreach:

周期1

主线程:filingListnew.Add(Object1);

周期2

主线程:filingListnew.Add(Object2);

周期3 ...

正如您在示例中所看到的,您无法通过使用 ParallelForeach 的方式获得性能。

关于c# - Parallel.Foreach 比 C# 中的普通 foreach 花费更多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540178/

相关文章:

javascript - 在 AngularJS 中使用 Wcf 数据服务

c# - 对 Ands : System. Guid 进行级联相等性检查

c# - BackgroundWorker 仍然卡住 UI

c# - LINQ 查询中的 NullReferenceException

c# - C#中动态方法的数据库存储

c# - 在 Xamarin.Forms 中将图像转换为字节数组

c# - vs2010中格式化逗号分隔参数

c# - Enterprise Library Logging 5 - 滚动平面文件

c# - 为什么在使用结构作为通用字典键时 C# 会产生垃圾?

c# - 系统.Runtime.Serialization.InvalidDataContractException : No set method for property