2011-12-24 2 views
0

Я делаю небольшую игру, и в ней много петель, которые используют определенную переменную adjacentSquares. Однако после каждого цикла это должно быть установлено на 0. Что будет быстрее, каждый раз создавая эту переменную или просто устанавливая ее на 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 
      } 
     } 

    } 
+0

Я предполагаю, что это будет почти то же самое. Но вы можете измерить его. Просто говорю'. –

+0

Я не думаю, что это важно вообще, но если я должен сказать, что для микро оптимизации, установив его на ноль, это был бы путь. – nawfal

+0

Хорошо, не понимал, что разница будет такой маленькой, так как у меня нет подумайте, как выглядит скомпилированный код. –

ответ

3

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

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

+0

Я попробую это, сообщит через минуту. –

+2

Это как все сказали :) Нет разницы. –

+0

Спасибо за проверку! –

1

Настоящий ответ: попробовать и посмотреть!

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

0

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

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

0

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

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), но если у вас есть, а затем положить, что вместо вместо того, чтобы выполнять одно и то же время.

Смежные вопросы