| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Странности с foreach |
| Автор: Rockie 11.8.2008, 11:43 | ||||
Наверное вопрос больше касается оптимизации кода в .NET. У меня есть программа, которая работает со списками SharePoint. Есть код, написанный и оставленный закоментаченным:
Визуально программа работает быстро, доли секунды. Затем я раскомментировал код:
Время работы программы сразу возрастает(3-5 секунд). Но ведь этот код не делает ничего Почитал про метод foreach. http://msdn.microsoft.com/ru-ru/magazine/cc163323.aspx Как понял, foreach - интересная штука, которая создает некий объект-итератор, позволяет работать с разными коллекциями абстрактно от данных, все это в try/catch.. Вот только непонятно - зачем, ведь в данном случае в моем коде в скобках пусто и ничего не происходит. Что это - плохая оптимизация? Или в .NET надо аккуратно обращаться с foreach? |
| Автор: Partizan 11.8.2008, 11:48 |
| Rockie, ну а разве не очевидно, что при раскомментаривании этих строк будет выполняться цикл? Или вы думаете, что компилятор соптимизирует этот код и опустит? в релизной версии пробовали? результат тот же? а вообще недавно дискуссия была по этому поводу: http://forum.vingrad.ru/topic-223121.html |
| Автор: nagg 11.8.2008, 11:48 |
| Видемо эта конструкция не расчитана для пустого тела цикла используй for |
| Автор: Rockie 11.8.2008, 12:05 | ||
| Partizan, в релизе то же самое. Конечно, imho по хорошему такие блоки надо пропускать. Похоже в .NET такие конструкции тоже не сворачиваются.
|
| Автор: mihryak 11.8.2008, 15:47 |
| foreach оптимизировать точно нельзя, даже если тело цикла пустое, т.к. могут происходить какие-либо дополнительные действия при создании энумератора (другое дело, что писать такой код - грех |
| Автор: Partizan 11.8.2008, 16:11 |
| mihryak, да...я тоже об этом подумал... |
| Автор: source777 13.8.2008, 12:14 |
| Очевидно, что косяк в глючной реализации класса SPListItem/SPList. Конечно проще списать погрешности своего кривого кода на foreach... Браво! Добавлено через 3 минуты и 42 секунды Такие конструкции даже в С не сворачиваются, что активно использовалось сишниками для организации временных задержек в стародавние времена, моветон естесвенно, но факт. |