Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

string.Length в проверке цикла или оптимизация

37K
12 октября 2011 года
Tolias28
48 / / 20.09.2010
У меня вопрос чисто любопытный и не несет проблемный характер. Начал только недавно изучать C# и немного удивило то, как в учебнике приводятся некоторые примеры, где в условии цикла фигурирует длина используемой строки. Например вот этот:
 
Код:
for (int i = 0; i < str.Length; i++)
            {
                Console.WriteLine("{0}: {1}", i, str);
            }

Это же не оптимально! Получается, что после каждой итерации приложение будет повторно каждый раз вычислять размер строки и только потом будет проверяться условие. А что, если в приложении таких циклов несколько сотен, и каждый выполняется по несколько тысяч раз за одну сессию? Разве не оптимальнее будет использовать следующий код:
 
Код:
int strLength = str.Length;
            for (int i = 0; i < strLength; i++)
            {
                Console.WriteLine("{0}: {1}", i, str);
            }


Но почему-то в книге этот момент вообще не обговаривается... Может я чего не понимаю в оптимизациях современных языков? и компилятор при компилировании кода, что в первом примере, скомпилирует приложение так, что длина строки не будет высляться каждый раз, несмотря на str.Length в каждой итерации цикла? Проясните пожалуйста новичка)
271
12 октября 2011 года
MrXaK
721 / / 31.12.2002
str.GetLength() вычислялся бы, а str.Length - такая же переменная
297
12 октября 2011 года
koodeer
1.2K / / 02.05.2009
Ознакомьтесь с этим: Исключение проверки диапазона (Range check elimination).
Очень многие оптимизации берёт на себя JIT.
37K
12 октября 2011 года
Tolias28
48 / / 20.09.2010


Прикольно. Получается, что str.Length можно использовать в циклах без боязни. Спасибо за прояснение)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог