Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在使用Parallel.ForEach之前使用MaxDegreeOfParallelism与分区数据_C#_.net_Parallel Processing - Fatal编程技术网

C# 在使用Parallel.ForEach之前使用MaxDegreeOfParallelism与分区数据

C# 在使用Parallel.ForEach之前使用MaxDegreeOfParallelism与分区数据,c#,.net,parallel-processing,C#,.net,Parallel Processing,我有一个处理任务,我必须以最快的方式分析大量数据。我想知道使用一种方法比另一种方法有什么好处/缺点 我有一个四核处理器与超线程(所以逻辑8核)。我们将以此为例: [选项1]使用MaxDegreeOfParallelism int numCores = 8; Parallel.ForEach(items, new ParallelOptions() { MaxDegreeOfParallelism = numCores }, item => { //// Process item

我有一个处理任务,我必须以最快的方式分析大量数据。我想知道使用一种方法比另一种方法有什么好处/缺点

我有一个四核处理器与超线程(所以逻辑8核)。我们将以此为例:

[选项1]使用
MaxDegreeOfParallelism

int numCores = 8;
Parallel.ForEach(items, new ParallelOptions() { MaxDegreeOfParallelism = numCores  }, item =>
{
    //// Process item
});
[选项2]将数据划分为地图:

int numCores = 8;
for (int i = 0; i < numCores ; i++)
{
    threadMap.Add(i, new List<Item>());
}

for (int i = 0; i < items.Count; i++)
{
    threadMap[i % numCores].Add(items[i]);
}

Parallel.ForEach(threadMap.Keys, thread =>
{
    foreach(var item in threadMap[thread])
    {
        //// Process item
    }
});
int numCores=8;
for(int i=0;i
{
foreach(线程映射[thread]中的变量项)
{
////过程项
}
});
现在,我的代码使用选项1。是否有任何理由让我切换到选项2?如果数据分区不均匀(处理时间方面),选项2可能会出现问题


有选项3吗?

您不能同时执行和分析这两个选项吗?在执行时,它们似乎是相同的(我可能没有正确的数据来正确测试这一点)。是否有过方案2有利的情况?