C # вычислительно дорого, как сделать это быстрее - PullRequest
0 голосов
/ 25 апреля 2011

Я знаю, что задавать глупый вопрос о том, почему этот код 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 ]

4 голосов
/ 25 апреля 2011

часть else X = minX; не имеет особого смысла.Это может привести к бесконечному циклу, потому что вы устанавливаете обратно значение переменной цикла X на более низкое значение.

Ваш код завершится только в том случае, если не более 1 столбца содержит ненулевое значение (при условии, что вы инициализировали minX какбольшое значение).

Например, предположим, что столбцы X=0 и X=1 содержат где-то ненулевое значение.Затем, когда он достигает ненулевого значения в столбце 0, значение minX устанавливается равным 0. Затем позже оно достигает ненулевого значения с помощью X=1, замечая, что minX>X ложно, и устанавливает X обратно в 0. И повторяется вечно.

1 голос
/ 25 апреля 2011

Я не знаю, как (short)getMap.GetValue(X,Y) сравнивается с getmap[X,Y], но кажется слишком сложным.

Что вы можете сделать, это заменить short[,] getMap на short[][] getMap.

Массив массивов (зубчатые массивы) обычно быстрее в этих сценариях вложенных циклов, потому что джиттер может оптимизировать проверку диапазона лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...