Ошибка 43 — There is not enough memory to complete this operation

VFP 9 SP2
Win 7x64 (ОЗУ 16 Гб)
Вдруг напоролся на ошибку 43: There is not enough memory to complete this operation
Сама процедура может быть длительная (больше дня).
Схематично исходные такие (репро в данной ситуации не представляю как воссоздать):
- Открывается много таблиц (их может быть больше 1000 - типовые спр-ки), которые потом используются в цикле и участвуют в запросах.
По этой причине вначале их все и открываю, чтобы не дергать ОКТР/ЗАКР.
- В цикле основная обработка идет через запросы SQL, где собираются сводные данные в промежут. курсоры. После чего всё собирается в общую результатную таблицу. Тут еще использую
[code]
FLUSH IN (cCurCursNm) FORCE).
[/code]
- Т.к. есть вложенные циклы + они "долгоиграющие", в неск. местах есть возможность прерывания:
[code]
IF INKEY()= 27
IF MESSAGEBOX('Остановить обработку?', 4+32+256, 'STOP', 60000)=6
lEsc= .T.
ENDIF
ENDIF
[/code]
В какой-то момент (зависимость не нашел пока) вылетает эта ошибка.
Я уже понатыкал много запись в лог, но не могу поймать, где рушится.
Грешил на много открытых курсоров, но вроде до 65 тыщ алиасов можно.
Добавил закрытие всех временных курсоров (результатов запросов) СРАЗУ после ненадобности - стало меньше валиться, но не решило проблему.
Заковыка еще и в том, что ошибка не ловится обработчиком, а возникает просто по ходу в произвольных местах :insane:
Хотя весь цикл сидит внутри TRY CATCH ENDTRY
Курил тему по подобной ошибке и в инете и тут на форуме, но не могу найти у себя такие точки :confused:
1) Может ли влиять на такую ошибку неск вложенных опросов клавы через INKEY()?
Т.к. случается и полный зависон VFP при нажатии ESC: по логу видно, что дальше цикл остановился (в логе нет записей),
UI не реагирует на нажатие и VFP 25% проца жрет, но байтики памяти почти не пользует. При этом закрыть можно только убитием процесса Фокса.
2) Может ли FLUSH как-то мешать или наоборот хорошо что сбрасывает на диск?
3) Может ли помочь SYS(1104) / SYS(1016) / SYS(3050) или вообще не та тема?
4) Есть ли смысл в данном случае в закрытии времен. курсоров, если в следующей итерации цикла они открываются заново?
В какую сторону вообще копать?

0

Автор публикации

Пользователи не найдены
Оставить комментарий
Авторизация
*
*
Генерация пароля