Скорость: создание новой переменной или установка переменной на 0? - PullRequest
0 голосов
/ 25 декабря 2011

Я делаю небольшую игру, в которой много циклов, в которых используется определенная переменная adjacentSquares.Однако после каждого цикла это должно быть установлено на 0.Что было бы быстрее, создавая эту переменную каждый раз или просто устанавливая ее на 0?Может быть, есть какой-то «экзотический» подход, который будет работать еще лучше?

Соответствующий (незаконченный) код:

void Update () 
    {           
        int adjacentSquares = 0;

        for (int x = 0; x <= gridX; x++)
        {
            for (int y = 0; y <= gridY; y++)
            {
                if (grid[x - 1,y - 1] == true)
                    adjacentSquares += 1;
                //and some more logic
            }
        }

    }

Ответы [ 4 ]

3 голосов
/ 25 декабря 2011

Почему бы не поэкспериментировать и не измерить время с помощью класса System.Diagnostics.Stopwatch? http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

Установите объект секундомера до этого цикла, а затем измерьте прошедшее время после него. Затем сообщите свои результаты: D

1 голос
/ 25 декабря 2011

Реальный ответ здесь: попробуйте и посмотрите!

Но я бы не ожидал, что будет разница в скорости. Во всяком случае, ваш стек будет использовать на 4 байта больше памяти (для каждой переменной), но даже это не является гарантией. Есть хорошее изменение: если компилятор C # или JIT-компилятор (если здесь есть выигрыш в производительности) распознает, что первая переменная больше не используется, он просто использует ту же самую память для последующих переменных. Но я повторю сказанное ранее: проведите несколько тестов - это единственный верный ответ на ваш вопрос.

0 голосов
/ 25 декабря 2011

Просто для улучшения производительности:

void Update () 
{           
    int adjacentSquares = 0;

    for (int x = -1; x < gridX; x++)
    {
        for (int y = -1; y < gridY; y++)
        {
            if (grid[x, y])
                adjacentSquares++;
            //and some more logic
        }
    }
}

Я не знаю точно, почему вам нужно начинать с -1 (0 - 1), но если у вас есть, то поместите этона вместо того, чтобы выполнять то же самое каждый раз.

0 голосов
/ 25 декабря 2011

Если вы действительно хотите улучшить производительность здесь, вы можете посмотреть здесь на параллельное решение, в зависимости от того, опирается ли каждый отдельный расчет на все предыдущие, которые вы сделали.

Вероятно, вы даже можете сделать это с помощью LINQ в зависимости от "некоторой дополнительной логики", которую вы делаете.

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