Неэффективное использование памяти 1С (8.2.11.235) 32 bit #495108


#0 by DangleFly
При разработке специфических средств экспорта из 1С встретился с проблемой. После длительной работы обработки (часов 3-4) возникает ошибка "Недостаточно памяти", хотя процесс 1сv8.exe потреблял максимум 800 Мбайт (определялось как пиковое использование памяти процессом 1сv8.exe в диспетчере задач win). Процесс 1сv8.exe выполнялся на терминальном сервере win 2003 64 bit, 8 Gb физической памяти. На момент тестирования использовалось всеми пользователями и системой максимум 5Gb.       Особенность обработки в том, что она многократно вызывает одну процедуру (по разрезам, по периодам, т.к. выборкам за большой период или по всем разрезам одновременно действительно уже не хватит памяти), которая читает большое количество строк (но не достаточно большое, что бы не хватало памяти) и ведет активное добавление строк в ТаблицуЗначений.       Я понимаю, когда 32-разрядное приложение вываливается, если выделение памяти приближается к 1,8-2 Гбайт. Но вот когда в процессе работы 1С запрашивает (если считать по показаниям диспетчера задач виндовс) 800 Мбайт, потом освобождает (выделение падает до 300 Мбайт) и так регулярно повторяется много раз (сотни раз).     Для эксперимента, написал обработку, создает большую таблицу значений, в итоге 1сv8 стал "выпадать" при выделении памяти этому процессу 1,7 Гбайт. Это я понимаю.     Является ли описанная проблема следствием фрагментации памяти? Как я понимаю, это глюк в 1С, так как проблемы "утечки памяти" нету. Кто как борется с такими вещами?
#1 by Demiurg
некоторые ставят более свежие релизы :)
#2 by H A D G E H O G s
Руки патчат
#3 by DangleFly
У меня вот релиз предпоследний. А где бы это найти почитать, в каком релизе какие исправлены ошибки?
#4 by Asmody
"что она многократно вызывает одну процедуру [...] и ведет активное добавление строк в ТаблицуЗначений." - что-то мне подсказывает, что не нужна там таблица значений
#5 by Immortal
в самой таблице значений страшного ничего нет. очищай принудительно используемые переменные, бывает помогает
#6 by DangleFly
Во-первых, дело тут не в самой таблице, а в том как 1С управлялет ресурсами.  во-вторых, что бы судить, нужна там таблица или нет, нужно видеть весь код.
#7 by DangleFly
Таблицу значений я привел просто как конкретный пример, что бы меньше абстрагироваться. Нужные переменные на нужных этапах инициализируются и при первой же возможности очищаются (или им присваиваиваются вновь создаваемые объекты), т.е. "кривого" использования переменных тут нет.
#8 by Immortal
в примере из что то сжирает память. это могут быть: 1. объекты самой 1с 2. неувязки в коде  - циклические ссылки 3. взаимодействие с окружением - записьчтение большого файла, к примеру кстати, про утечки. проводился ли анализ тех.журнала?
#9 by Bober
Наверное кэшируются выгруженные объекты, вот и валится.
#10 by rs_trade
технологический журнал заюзай. может чем поможет
#11 by DangleFly
Ну так если выделяется например 800 Мб (не больше) а доступно как минимум в 2 раза больше(1.6-1.7 Gb), то че ей валиться от нехватки памяти?
#12 by Advan
А с чего ты взял что не хватает оперативной памяти? - это не факт
#13 by leshikkam
Посмотри на количество Users и GDI в диспетчере задач с ходом выполнения обработки - я думаю что "течь" будет оочень большая
#14 by DangleFly
Не так диалоговое окно вылезает от 1С, в котором написано "Не хватает памяти", может не дословно привел, но смысл 100% такой
#15 by H A D G E H O G s
Нету там утечек, если он интерфейсные объекты не открывает. Код приведи
#16 by H A D G E H O G s
Открой 50 Блокнотов и посмотри утечки Users и GDI
#17 by DangleFly
Код привести  - в смысле исходник? Или код ошибки?
#18 by DangleFly
Но сегодня уже и так и так не смогу привести....
#19 by H A D G E H O G s
Исходник
#20 by H A D G E H O G s
Лучше в виде ВнешнейОбработки
#21 by DangleFly
Посмотрю, но объекты "Users и GDI" тут не причем.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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