嵌套for循环的性能问题

时间:2017-05-05 17:27:16

标签: c# performance for-loop

我有一个嵌套的for循环,可以执行一些计算,并且数学已经在很大程度上得到了简化,但是我仍然存在性能问题,我不确定我能解决。我不相信它可以解决,因为这些for循环执行的次数很多。现在我不熟悉使用任何分析工具来帮助确定减速发生在哪些内部,但我相当确定它只是这些循环执行的次数。

我非常感谢帮助减少此代码并提高此代码的性能。我试图远离HPC或高度并行化的解决方案,但如果这是使其真正有效的唯一方法,那么我将考虑走这条路。

这里的代码是X = 20,000和N_zero = 45,420(从实际测试中提取的值):

Dictionary<decimal, int> n_alpha = new Dictionary<decimal, int>();
Random rand = new Random();
decimal r = 0m;
decimal check=0m;

for (int i = 0; i < X; i++)
{
    B = N_0 = N_1 = N0_ = N1_ = 0;
    for (int j = 0; j < N_zero; j++)
    {
        // need a random decimal value between 0 and 1
        r = (decimal)rand.Next() / int.MaxValue;
        if (r <= r1)
        {
            N0_ += 1;
            N_0 += 1;
        }
        else if (r1 < r && r <= r2)
        {
            B += 1;
            N0_ += 1;
            N_1 += 1;
        }
        else if (r2 < r && r <= r3)
        {
            B += 1;
            N_0 += 1;
            N1_ += 1;
        }
        else if (r > r3)
        {
            N1_ += 1;
            N_1 += 1;
        }

    }
    check = N_0 * N_1 * N0_ * N1_;
    if (check != 0)
    {
        decimal a = 1 - (B * N_zero) / ((N_0 *N1_) + (N0_ *  N_1 ));
        // technically only tracking 4 decimal points, so key should reflect this
        decimal key = Math.Round(a, 4);
        if (n_alpha.ContainsKey(key))
        {
            n_alpha[key] += 1;
        }
        else
        {
            n_alpha.Add(key, 1);
        }
    }
}

0 个答案:

没有答案