Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странности с foreach, оптимизация 
:(
    Опции темы
Rockie
Дата 11.8.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Наверное вопрос больше касается оптимизации кода в .NET. У меня есть программа, которая работает со списками SharePoint. Есть код, написанный и оставленный закоментаченным:
                
Код
                // выведем элементы списков
                //foreach (SPListItem listItem in currentList.Items)
                //{

                //}


Визуально программа работает быстро, доли секунды. Затем я раскомментировал код:

Код
                // выведем элементы списков
                foreach (SPListItem listItem in currentList.Items)
                {

                }


Время работы программы сразу возрастает(3-5 секунд). 

Но ведь этот код не делает ничего  smile 

Почитал про метод foreach. 
http://msdn.microsoft.com/ru-ru/magazine/cc163323.aspx

Как понял, foreach - интересная штука, которая создает некий объект-итератор, позволяет работать с разными коллекциями абстрактно от данных, все это в try/catch.. Вот только непонятно - зачем, ведь в данном случае в моем коде в скобках пусто и ничего не происходит. Что это - плохая оптимизация? Или в .NET надо аккуратно обращаться с foreach?


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Partizan
Дата 11.8.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Rockie, ну а разве не очевидно, что при раскомментаривании этих строк будет выполняться цикл? Или вы думаете, что компилятор соптимизирует этот код и опустит? в релизной версии пробовали? результат тот же?

а вообще недавно дискуссия была по этому поводу:

http://forum.vingrad.ru/topic-223121.html


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
nagg
Дата 11.8.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 6.1.2008
Где: Minsk

Репутация: нет
Всего: 4



Видемо эта конструкция не расчитана для пустого тела цикла   smile 
используй for 
--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
Rockie
Дата 11.8.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Partizan, в релизе то же самое. Конечно, imho по хорошему такие блоки надо пропускать.

Цитата(nagg @  11.8.2008,  11:48 Найти цитируемый пост)
Видемо эта конструкция не расчитана для пустого тела цикла  smile  

Похоже в .NET такие конструкции тоже не сворачиваются.  smile 
Код
                for (int i = 0; i < 100000000; i++)
                { 
                }



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
mihryak
Дата 11.8.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



foreach оптимизировать точно нельзя, даже если тело цикла пустое, т.к. могут происходить какие-либо дополнительные действия при создании энумератора (другое дело, что писать такой код - грех smile)
PM MAIL ICQ   Вверх
Partizan
Дата 11.8.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



mihryak, да...я тоже об этом подумал...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
source777
Дата 13.8.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Очевидно, что косяк в глючной реализации класса SPListItem/SPList. Конечно проще списать погрешности своего кривого кода на foreach... Браво!

Добавлено через 3 минуты и 42 секунды
Цитата(Rockie @  11.8.2008,  12:05 Найти цитируемый пост)
Похоже в .NET такие конструкции тоже не сворачиваются. 
Такие конструкции даже в С не сворачиваются, что активно использовалось сишниками для организации временных задержек в стародавние времена, моветон естесвенно, но факт.


Это сообщение отредактировал(а) source777 - 13.8.2008, 12:15


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1277 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.