C#计算量很大,如何让它更快

时间:2011-04-25 19:44:27

标签: c# .net performance multidimensional-array

我知道这是一个愚蠢的问题,为什么这个代码minX计算成本很高,但我想,有人可能会告诉我我的错误。感谢

// getMap is a 2 dimentional array of type short I need to find maxX,minX,maxY,minY 
//Can't use Math.Min , as it will get the lower bound i.e 0, i want values after filtering
for (int X = 0; X < getMap.GetLength(0); X++)
{       
    for (int Y = 0; Y < getMap.GetLength(1); Y++)
    {           
        if((short)getMap.GetValue(X,Y) !=  0)
        {
           //if i take it out, it works fine ,I need to 
            if (minX > X )
                minX = X;
            else
                X = minX;
        // Prints some stuff and does other computation 
        }
    }
}
// Draws image 

2 个答案:

答案 0 :(得分:4)

else X = minX;部分没有多大意义。它会导致无限循环,因为您将循环变量X设置为较低的值。

只有当最多1列包含非零值时(假设您将minX初始化为较大的值),您的代码才会终止。

例如,假设X=0X=1列在某处包含非零值。然后当它击中0列中的非零值时minX被设置为0.然后它会使用X=1通知minX>X通知非零值并将X设置为0 0.永远重复。

答案 1 :(得分:1)

我不知道(short)getMap.GetValue(X,Y)getmap[X,Y]的比较,但似乎过于复杂。

您可以做的是将short[,] getMap替换为short[][] getMap

阵列数组(锯齿状数组)在这些嵌套循环场景中通常更快,因为抖动可以更好地优化范围检查。