Как освободить память после запроса #92868


#0 by WebInc
Ситуация такая, формируется запрос который выбирает большое количество данных и соответственно жрет память, но после выхода память не освобождается и 1С сильно тормозит. Как высвободить память после запроса?7.7 Релиз 23, запрос делается по регистрам.
#1 by OFF
C ?
#2 by WebInc
База dbf, плюс это не то там написано как выделить память ) а не освободить. И очень желательно обойтись без внешних компонент
#3 by Худой
Не буду утверждать, но, мне показалось, что память освобождается если используется внешняя обработка. Я имею ввиду, ERT. Когда она закрывается. А так, действительно, после работы с большими объемами, начинает подтормаживать из-за свопинга.
#4 by Морозов Александр
Запрос=0; - так всвобождается?А вообще должна высвобождаться после завершения выполнения процедуры...
#6 by Морозов Александр
А может переменная запрос определена как переменная модуля (или глобальная), а не переменная процедуры?
#8 by Морозов Александр
Дады не знаю...
#9 by Морозов Александр
Ох... вроде не понедельник :)
#11 by artbear
В 1С как раз реализована сборка мусора. Правда, как всегда, не самым лучшим образом, но для подавляющего большинства наших задач хватает.А ты уверен, что память занимается запросом, а не большой и сложной таблицей, например?
#13 by Морозов Александр
Ну покажи хоть свою обработку...
#14 by Палыч
Попробуй после выполнения запроса проинициализировать его новым объектом типа "Запрос":запрос = создатьобъект("Запрос");Для объектов 1С++ это работает.
#15 by smaharbA
все тоже что и с диском (или почти) фрагментация и "повисшие" блоки, нужна очистка и дефрагментация какой-нибудь purgв принципе взять вроде FreeMem или подобную и настроить на каждые полчаса без отслеживания текущего состояния, вобщем помогает, хотя и не сильно, только не настраивай на слежение за состоянием/наличием, а то еще и прибавит тормозов...но это не методологический(уф...) подход
#17 by Палыч
Наверно, надо условий в запрос добавить ;-)
#18 by Lexusss
А дбф закрыл? Или дискриптор так и болается?
#20 by gg
Может дело не в запросе? попробуй поочищать глобальные переменные. было подобное с таблицами значений.
#21 by gg
Между прочим было в стандартной выгрузке в xml, которая с конфигурацией для конвертации данных идет. Наблюдался нереальный рост таблицы выгруженных объектов. Хотя таблица была не большая при сохранении ее в файл размер файла был всего 800к а в памяти она занимала около 2Гб.
#23 by WebInc
В ОП или свопе?
#24 by gg
Виртуальная память т.е. своп
#25 by WebInc
И как он потом быстро очистился?
#26 by gg
Если ты закрываешь обработку то конечно должно чистится.
#27 by WebInc
Закрываю. Но своп очень долгое время остается стабильно ~600 метров (( и все тормозит
#28 by gg
Проблема была в том, что памяти нехватало. при формировании XML файла размером больше 200м памяти уходило то ли 2Гб то ли 4 Гб непомню уже и 1с падала.
#29 by WebInc
Понятно значит у тебя была та же проблема, только у меня своп поменьше )). Ты как-нибудь обошел этот косяк?
#30 by gg
Обошел. я экспериментровал на размере таблицы 50м, а не на полной. При этом когда глобальную переменную зануляешь память освобождалась. при 50м почти сразу. При 600м не пробывал.
#31 by WebInc
А что у тебя было в глобальной переменной?
#32 by gg
ТЗ
#33 by WebInc
Ладно завтра попробую поковырять еще
#34 by gg
Попробуй. Я у себя исправлял так: в ТЗ заносились ссылки на справочник вроде тоготз.Элемент=спр.ТекущийЭлемент;я заменил натз.Элемент=спр2.ТекущийЭлемент;то же самое для документов.Не совсем понимаю почему помогает, но помогает.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С