Разница в производительности между FOR LOOPS с i <n по сравнению с i <= n - PullRequest
0 голосов
/ 21 мая 2011

И в меньшей степени, как насчет цикла for с i <(n + 1)? Будет ли (n + 1) вычисляться один раз в начале цикла или на каждой итерации? </p>

for(int i=0; i<(n+1); i++){  
   // Do something
}

for(int i=0; i<=n; i++){  
   //Do something
}

UPDATE:
Как предположили почти все, я провел простой тест с тремя вариациями цикла

Ответы [ 5 ]

3 голосов
/ 21 мая 2011

Скорее всего, это будет зависеть от того, меняется ли значение n в течение цикла.Если нет, то я думаю, что любой современный компилятор будет кэшировать значение n + 1, а не вычислять его каждую итерацию.Конечно, это не гарантия, и без оптимизации, n + 1 будет оцениваться каждый раз.

EDIT : Чтобы ответить на заглавный вопрос, я

1 голос
/ 21 мая 2011

Доверяйте компилятору.Хотя компилятор c # + JITer не так хорош, как лучшие компиляторы c ++, он все же довольно хорош.Если вы не решите с помощью профилировщика, что это вызывает проблему, вы не должны тратить циклы на беспокойство по поводу такого рода микрооптимизаций.Вместо этого напишите, что логически соответствует тому, что вы делаете.

1 голос
/ 21 мая 2011

Это зависит от компилятора, ни один языковой стандарт не определяет это, хотя большинство компиляторов пытаются кэшировать значение (если оно доказано, что оно инвариантно).

1 голос
/ 21 мая 2011

Я действительно сомневаюсь, что это измерило бы разницу в выполнении цикла. Особенно < против <=. Если вы действительно обеспокоены, вы должны измерить его .

0 голосов
/ 21 мая 2011

(n+1) будет оцениваться на самой итерации, при условии, что компилятор не оптимизирует его.

Что касается проблем с производительностью - это очень легко измерить для себя, используя StopWatch класс.

Я бы предположил, что если ваш i не очень высок, различия будут незначительными.

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