![]() |
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум | ![]() |
![]() |
Лисоводы всех стран, объединяйтесь !!! |
Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
VFP 9 SP2
Win 7x64 (ОЗУ 16 Гб) Вдруг напоролся на ошибку 43: There is not enough memory to complete this operation Сама процедура может быть длительная (больше дня). Схематично исходные такие (репро в данной ситуации не представляю как воссоздать): - Открывается много таблиц (их может быть больше 1000 - типовые спр-ки), которые потом используются в цикле и участвуют в запросах. По этой причине вначале их все и открываю, чтобы не дергать ОКТР/ЗАКР. - В цикле основная обработка идет через запросы SQL, где собираются сводные данные в промежут. курсоры. После чего всё собирается в общую результатную таблицу. Тут еще использую FLUSH IN (cCurCursNm) FORCE). IF INKEY()= 27 IF MESSAGEBOX('Остановить обработку?', 4+32+256, 'STOP', 60000)=6 lEsc= .T. ENDIF ENDIF В какой-то момент (зависимость не нашел пока) вылетает эта ошибка. Я уже понатыкал много запись в лог, но не могу поймать, где рушится. Грешил на много открытых курсоров, но вроде до 65 тыщ алиасов можно. Добавил закрытие всех временных курсоров (результатов запросов) СРАЗУ после ненадобности - стало меньше валиться, но не решило проблему. Заковыка еще и в том, что ошибка не ловится обработчиком, а возникает просто по ходу в произвольных местах ![]() Хотя весь цикл сидит внутри TRY CATCH ENDTRY Курил тему по подобной ошибке и в инете и тут на форуме, но не могу найти у себя такие точки ![]() 1) Может ли влиять на такую ошибку неск вложенных опросов клавы через INKEY()? Т.к. случается и полный зависон VFP при нажатии ESC: по логу видно, что дальше цикл остановился (в логе нет записей), UI не реагирует на нажатие и VFP 25% проца жрет, но байтики памяти почти не пользует. При этом закрыть можно только убитием процесса Фокса. 2) Может ли FLUSH как-то мешать или наоборот хорошо что сбрасывает на диск? 3) Может ли помочь SYS(1104) / SYS(1016) / SYS(3050) или вообще не та тема? 4) Есть ли смысл в данном случае в закрытии времен. курсоров, если в следующей итерации цикла они открываются заново? В какую сторону вообще копать? Исправлено: VeterVFP, 17.05.22 16:04 ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
PaulWist Сообщений: 14093 |
Ищи косяки в данных, которые используешь forum.foxclub.ru
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
Эту тему видел. В открываемых таблицах есть МЕМО-поля, но они не используются мной вообще. Или сам факт наличия испорченного МЕМО-поля может вредить? UPD. Ошибся, в используемых табл. нет МЕМО вообще. Там неск десятков Гигов данных ![]() При открытии таблиц никаких ошибок нет. И обработчик не ловит почему такую ошибку (как упоминал, ошибка рандомна)? Исправлено: VeterVFP, 18.05.22 08:20 ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
of63 Сообщений: 23002 Откуда: Н.Новгород |
> через запросы SQL
так бывает, когда соединяешь 1-2 ГБ-йтные таблицы, фокс строит промежуточные какие-то курсоры (временные файлы), а больше 2Г он не может файлы обслуживать, т.к 32-разрядный (хотя и 32-приложения могут работать с файлами > 2Г), но вот такие ограничения ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
В моих таблица нет таких размеров (макс это 700-800 Мб). Да и, если не ошибаюсь, там другая ошибка вылетает, если превышает курсор 2Гб - и она отлавливается обработчиком. ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
PaulWist Сообщений: 14093 |
Не обязательно Мемо, могут быть индексы. Предлагаю, открыть таблички и просканировать их обновив какое-то поле replace MyField with MyField in MyCursor ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
Taran Сообщений: 13137 Откуда: Красноярск |
А каков режим буферизации промежуточных курсоров?
М.б. полное отключение поможет. Все-таки где-то это хранится. ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
Вчера спецом у всех табл индексы пересоздал. Но попробую предложенное ![]() ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
Речь про CURSORSETPROP("Buffering", 1) глобально для всех открываемых? В SET-ах у меня SET MULTILOCKS ON есть только. Как проверить буф-ю именно для временных курсоров? Через CURSORGETPROP("Buffering", DBF('TempCurs'))? ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
PaulWist Сообщений: 14093 |
Вот ещё, что может быть - это создание фоксом курсора без кляузы NOFILTER, те фактическое наложение фильтра на исходный алиас. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено: PaulWist, 18.05.22 09:56 ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
Taran Сообщений: 13137 Откуда: Красноярск |
Глобально для всех последующих открытий таблиц и курсоров задать третий параметр CURSORSETPROP("Buffering", 1, 0) ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
Taran Сообщений: 13137 Откуда: Красноярск |
Касательно отлова Escape... Не понравилась мне изначально такая идея. Поэтому ваял небольшой COM/EXE сервер и запускал его при старте долгоиграющей процедуры. В этом сервере одна кнопка "Прервать", которая меняет некоторый признак этого сервера-объекта, а основная программа отлавливает не нажатие Esc, а анализирует этот признак. Сервер в отдельном процессе, поэтому реагирует адекватно на интерактив. ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
Прогнал таблы - никаких ошибок не выявлено. Всё корректно открылось и записалось. Upd. Только что обратил внимание на "просканировать", а я открывал таблу и REPLACE поле 1й записи - индекс же должен перестроиться по-идее? Или обязательно REPLACE ALL сделать? Исправлено: VeterVFP, 18.05.22 10:32 ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
PaulWist Сообщений: 14093 |
Лучше просканировать, тогда можно словить запись на которой возникнет проблема. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
Просканировал и зареплейсил по всем записям - ошибок нет.
Значит лучше во все запросы добавить NOFILTER? Тогда оптимизация отключится ведь. Т.е. проблема с памятью из-за нарастающего буфера может быть? ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
Taran Сообщений: 13137 Откуда: Красноярск |
Утверждать не буду, но буферизация - довольно таки вкусный ништяк. А за все ништяки приходится расплачиваться ресурсами. ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
sphinx Сообщений: 30055 Откуда: Каменск-Уральски |
Может есть какая-то динамически собираемая строка?
В каких-то случаях пишет "Слишком длинная строка", а именно нехватку памяти. Нет рекурсии? ------------------ "Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с) ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
В данном цикле динамических строк нет, рекурсия тут тоже не используется. Ошибка была только про нехватку памяти. Но не могу понять, почему она вылетает поверх процесса (замораживая его). Но при этом, если нажать ОК, то процесс идет дальше (т.е. обработчик не схватил её). И дальше может вылезать опять много раз. ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
sphinx Сообщений: 30055 Откуда: Каменск-Уральски |
Не пробовал поставить задержку, типа WAIT '-----' WINDOW TIMEOUT 0.01?
------------------ "Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с) ![]() |
||
Re: Ошибка 43 - There is not enough memory to complete this operation | |||
---|---|---|---|
VeterVFP Автор Сообщений: 389 Откуда: Москва |
А где? В начале какого-то из циклов? Что она даст? ![]() |
||
© 2000-2022 Fox Club  |