Как уменьшить расход памяти при создании/редактировании документов на сервере
Платформа 8.3, управляемые формы, файловый вариант.
Загружаю данные из xml файла, создаю МассивДоков, затем начинаю создавать или изменять документы, и тут начинает сжираться память. Ощущение что все документы после записи висят в памяти.
Сразу скажу, что используемые таблицы занимают немного места. Кто нибудь подскажет, как сделать, чтобы после записи каждого документа он не оставался в памяти.
Загружаю данные из xml файла, создаю МассивДоков, затем начинаю создавать или изменять документы, и тут начинает сжираться память. Ощущение что все документы после записи висят в памяти.
Для Каждого Док Из МассивДоков Цикл
ФлагНовый = ложь;
ЗначениеРекв = 0;
ПоискДок = ВсеДопРеквизиты.Найти( Строка(Док.Номер) + "_" + Док.Дата);
Если ПоискДок = Неопределено Тогда
ФлагНовый = Истина;
НовДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Иначе
НовДок = ПоискДок.Объект.ПолучитьОбъект();
ЗначениеРекв = НовДок.СуммаДокумента;
НовДок.Товары.Очистить();
НовДок.ТоварыПоДаннымПоставщика.Очистить();
КонецЕсли;
...
КонецЦикла;
ПоказатьСразу скажу, что используемые таблицы занимают немного места. Кто нибудь подскажет, как сделать, чтобы после записи каждого документа он не оставался в памяти.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) wposta, и да. он остается в памяти. это называется кэш :) и да. думаю, наполняется он в том числе благодаря разыменованию ссылки и ПолучитьОбъект()
кто-то на мисте когда-то приводил ответ 1С:
"Размер кеша определяется, как минимальное значение из объема доступной оперативной памяти компьютера и объема доступного виртуального адресного пространства процесса. При приближении объема занятого виртуального адресного пространства процесса 1С:Предприятия к этой величине кеш объектов начинает освобождаться форсированно. Возможности изменения правил вычисления максимального объема кеша объектов не предусмотрено."
кто-то на мисте когда-то приводил ответ 1С:
"Размер кеша определяется, как минимальное значение из объема доступной оперативной памяти компьютера и объема доступного виртуального адресного пространства процесса. При приближении объема занятого виртуального адресного пространства процесса 1С:Предприятия к этой величине кеш объектов начинает освобождаться форсированно. Возможности изменения правил вычисления максимального объема кеша объектов не предусмотрено."
А тут ли проблема?
* А вдруг ЭксМЛ жрет? Докажите свою уверенность (себе в т.ч.).
* Данный тест не должен жрать память. Только не видно команды Записать()
* Далее. Вот эта мысль не ясна:
Т.е. ищется не сам документ в базе, а его реквизиты в каком-то наборе данных.
Не шибко правильно.
* А вдруг ЭксМЛ жрет? Докажите свою уверенность (себе в т.ч.).
* Данный тест не должен жрать память. Только не видно команды Записать()
* Далее. Вот эта мысль не ясна:
ПоискДок = ВсеДопРеквизиты.Найти( Строка(Док.Номер) + "_" + Док.Дата);
Т.е. ищется не сам документ в базе, а его реквизиты в каком-то наборе данных.
Не шибко правильно.
(0) Переменная "Док" это данные ссылочного типа? Получение через точку от ссылки очень вредно. Во-первых, из базы считывается весь объект. Вообще весь, со всеми табличными частями; во-вторых, полученный объект кэшируется, т.е. "застревает" в памяти.
Избавься от получения через точку. Вытаскивай данные запросом. Расход памяти точно уменьшится.
Если результат не удовлетворит, есть еще мысли.
Избавься от получения через точку. Вытаскивай данные запросом. Расход памяти точно уменьшится.
Если результат не удовлетворит, есть еще мысли.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот