Есть ли выигрыш в производительности с выравнивающими условиями? - PullRequest
1 голос
/ 04 ноября 2011

Например, предположим следующий код:

foreach(Car car in Cars)
{
    if(car.Damaged)
       LogWarning();
    else
       LogInfo();
}

Что лучше сделать:

foreach(Car car in Cars)
{
    if(car.Damaged)
    {
       LogWarning();
       continue;
    }

       LogInfo();
}

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

Есть ли выигрыш в производительности с условием выравнивания?

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

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

Книгоиздатели могли бы сделать книги легкими, чтобы их было легче переносить и с меньшими затратами на окружающую среду, печатая их однострочным шрифтом без полей страницы. Почему они не?

Код не только для компилятора. Это тоже для человека, и человек должен уметь читать и поддерживать его.

0 голосов
/ 04 ноября 2011

С хорошим компилятором. Это произведет то же самое. Итак, вы хотите знать, хорош компилятор или нет. Лучший способ - посмотреть на скомпилированный код и запустить анализ производительности, если получаются две разные вещи.

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