在平行中传递列表



这是我第一次尝试使用" Parallel.Foreach"循环来查看我是否可以使用系统中的许多内核来提高性能。我试图查看MSDN和其他示例,但我找不到通过以下3个列表中传递的方法。

如何与平行循环交换此循环?我想我正在寻找如何通过这3个列表中的基础知识,以便我可以在并行中与它们合作。

谢谢!

        List<double> nums = new List<double> { 0.0005, 0.00035, 0.00205 };
        List<double> list1 = new List<double>();
        List<double> list2 = new List<double>();
        List<double> list3 = new List<double>(); Random random = new Random(); double calc1 = 0;
        List<double> resultLIST = new List<double>();
        for (int i = 0; i < 4000000; i++)
        {
            list1.Add(nums[random.Next(0, 7)]);
            list2.Add(nums[random.Next(0, 7)]);
            list3.Add(nums[random.Next(0, 7)]);
        }
        //How can the below loop be replaced with a: Parallel.ForEach loop?
        for (int i = 0; i < list1.Count; i++)
        {
            calc1 = list1[i] * list2[i] * list3[i];
            resultLIST.Add(calc1);
        }
        //Now sort the list 
        resultLIST.Sort();
        //Here I will write "resultLIST" to a .txt file

就个人而言,我将使用linq与 AsParallel

var result = Enumerable.Range(0, list1.Count)
    .AsParallel()
    .Select(index => list1[index] + list2[index] + list3[index])
    .OrderBy(v => v)
    .ToList();

请注意,list1list2list3在此计算过程中不会更改。

您使用并联。在您的情况下,您不能。还要记住使用并行。以 *或 可以实际降级性能,因为有更多的开销。

在您的情况下,最好的方法将是将所有三个列表分配为1000000个元素。将它们添加到一个数组中,然后并行调用。这样,您将有4个线程进行1000000操作,如果您的计算机有4个内核,则可以在每个核心上独立运行。

相关内容

  • 没有找到相关文章

最新更新