|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Delphi XE, не работают циклы
Добрый день!
Использую в работе Delphi XE, всё хорошо и вот недавно возникла проблема перестали работать некоторые циклы. Проект большой, суть его в том имеется таблица значений, столбцов порядка 30, а строк может быть много, от единиц до десятков и сотен тысяч. Строки обрабатываются в циклах и вот некоторые из этих циклов, при количестве итераций больше 32597 строк, перестали работать, то есть программа их просто проскакивает, при этом никаких условий перед циклом нет. Так-же заметил что в некоторых случаях такое возникало когда цикл был не от 0, но тем не менее первое значение цикла было меньше конечного: Код:
procedure SomeProc(FirstRow, LastRow: integer);{FirstRow заведомо меньше LastRow} var i: integer; begin {Некоторые начальные операции, которых может и не быть} for i := FirstRow to LastRow do begin {операции со строкой i} end; end; Временное решение было таким: Код:
procedure SomeProc(FirstRow, LastRow: integer);{FirstRow заведомо меньше LastRow} var i, j: integer; begin {Некоторые начальные операции, которых может и не быть} for j := 0 to (LastRow - FirstRow) do begin i := FirstRow + j; {операции со строкой i} end; end; В итоге цикл работает при количестве итерации большем 32597. Но был и случай когда цикл уже был от 0: Код:
procedure SomeProc;{FirstRow заведомо меньше LastRow} var i: integer; begin {Некоторые начальные операции, которых может и не быть} for i := 0 to RowCount - 1 do begin {операции со строкой i} end; end; В этом случае, сделал так: Код:
procedure SomeProc;{FirstRow заведомо меньше LastRow} var i, j: integer; begin {Некоторые начальные операции, которых может и не быть} for j := 0 to RowCount - 1 do begin i := j; {операции со строкой i} end; end; И цикл начал работать. При замене цикла на цикл while всё работает. Оптимизация отключена глобально. В чём тут может быть проблема? |