嵌套For循环的C#优化

时间:2018-05-21 19:40:17

标签: c#

我正在努力提高代码的执行速度。通过C#.NET诊断工具,我发现下面的代码正在大大减慢我的程序,因为我循环了10,000次。我想输入关于这部分代码的优化。

long length = Random_Vector_Size;

Parallel.ForEach(Partitioner.Create(0, length), (range) =>
{
      for (q = 1; q <= Random_Vector_Size; q++)
      {
          U[q - 1] = MathNet.Numerics.Distributions.Normal.InvCDF(0.00, 1.00, instance.genrand_real3());
      }
});


for (p = 1; p <= Random_Vector_Size; p++)
{
    C[p - 1] = 0;
    Parallel.ForEach(Partitioner.Create(0, length), (range) =>
    {
        for (q = 1; q <= Random_Vector_Size; q++)
        {
            C[p - 1] += M[p - 1][q - 1] * U[q - 1];
        }
    });
}

1 个答案:

答案 0 :(得分:0)

你的循环有两种不同的情况。

在第一种情况下,您似乎使用调用InvCDF的值填充数组。如果函数是处理器密集型的,那么并行方法在这里是有意义的,但Parallel设置开销很容易淹没并行计算结果的好处。

在第二种情况下,看起来您正在做一个非常简单的计算:

4个数组查找 1乘法 1加法(取决于之前的步骤)。

在这种情况下,并行性不可能带来任何好处,特别是考虑到您正在进行的产品总和计算的性质。

您可能会从并行外部for循环而不是内部循环中获得一些好处。运行基准测试。