首页 > 解决方案 > 为什么 Paralle.for 松得这么厉害

问题描述

我正在尝试对 For 和 Parallel For 进行基准测试,以将列表复制到单个列表中

这里点是 int x 的结构, int y

以下是基准代码:

var points = addPoints();
int nbPoints = points.Count;


Measure("Normal Forloop", () =>
{
    List<int> x = new List<int>(nbPoints);
    List<int> y = new List<int>(nbPoints);
    for (int i = 0; i < nbPoints; i++)
    {
        x.Add(points[i].X);
        y.Add(points[i].Y);
    }
});

Measure("Parallel Forloop", () =>
{
    ConcurrentBag<int> x = new ConcurrentBag<int>();
    ConcurrentBag<int> y = new ConcurrentBag<int>();
    Parallel.For(0, nbPoints, i =>
    {
        x.Add(points[i].X);
        y.Add(points[i].Y);
    });
});

现在对于 NumberOfPoints = 1000000 的列表大小;

正常for循环的性能:24 ms

并行 For 循环的性能:367 毫秒

为什么parallel for 松得这么厉害,是不是因为concurrentbags?

标签: c#task-parallel-libraryparallel.foreach

解决方案


推荐阅读