![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||||||
|
||||||||
![]() Добрый день!
Использую в работе Delphi XE, всё хорошо и вот недавно возникла проблема перестали работать некоторые циклы. Проект большой, суть его в том имеется таблица значений, столбцов порядка 30, а строк может быть много, от единиц до десятков и сотен тысяч. Строки обрабатываются в циклах и вот некоторые из этих циклов, при количестве итераций больше 32597 строк, перестали работать, то есть программа их просто проскакивает, при этом никаких условий перед циклом нет. Так-же заметил что в некоторых случаях такое возникало когда цикл был не от 0, но тем не менее первое значение цикла было меньше конечного: Код:
Временное решение было таким: Код:
В итоге цикл работает при количестве итерации большем 32597. Но был и случай когда цикл уже был от 0: Код:
В этом случае, сделал так: Код:
И цикл начал работать. При замене цикла на цикл while всё работает. Оптимизация отключена глобально. В чём тут может быть проблема? |
#2
|
|||
|
|||
![]() Проблема в Delphi XE - все творения Embarcadero заметно проигрывают более ранним версиям в стабильности и скорости. Почему в такой ситуации Embarcadero продолжает накручивать разные плюшки (вообщем-то интересные, но не ценой же стабильности) и выпускать все новые и новые версии, а не отлавливает баги уже существующих версий - вопрос к ним (наверное это торжество маркетинга над программингом
![]() Последний раз редактировалось Lucky192, 10.10.2011 в 16:06. |
#3
|
|||
|
|||
![]() Воспроизвел ошибку на тестовом проекте, вынес в класс:
Код:
В результате получаем, если:
Если реализацию анонимного метода вынести в отдельный метод, тогда всё работает как надо. Если условие Check сделать без параметров, тогда будет всё работать и с анонимным методом. Либо я что-то делаю не так, либо это баг в Delphi XE, если это так, то стоит ли отправлять это на сайт Эмбаркадеро? |
#4
|
||||
|
||||
![]() Вообще меня смущает ваша цифра 32767. Складывается впечатление, что по неведомым причинам у вас в цикле используется 2 байтный счетчик, а не 4 байтный. А что если счетчик определить не как Integer, а как DWord?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() Тут именно баг компилятора, вот такой код он генерирует для цикла:
Код:
и тут действительно счётчик 16 битный. Готовлю отчет в QualityCentral. |
#6
|
|||
|
|||
![]() Запостил отчёт:
http://qc.embarcadero.com/wc/qcmain.aspx?d=99909 Проголосуйте, если есть возможность. |