Как уменьшить расход памяти при создании/редактировании документов на сервере

1. wposta 15 17.08.15 17:27 Сейчас в теме
Платформа 8.3, управляемые формы, файловый вариант.
Загружаю данные из xml файла, создаю МассивДоков, затем начинаю создавать или изменять документы, и тут начинает сжираться память. Ощущение что все документы после записи висят в памяти.

Для Каждого Док Из МассивДоков Цикл
         ФлагНовый = ложь;
         ЗначениеРекв = 0;
         ПоискДок = ВсеДопРеквизиты.Найти( Строка(Док.Номер) + "_" + Док.Дата);
         Если ПоискДок = Неопределено Тогда
            ФлагНовый = Истина;
            НовДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
         Иначе
            НовДок = ПоискДок.Объект.ПолучитьОбъект();
            ЗначениеРекв = НовДок.СуммаДокумента;
            НовДок.Товары.Очистить();
            НовДок.ТоварыПоДаннымПоставщика.Очистить();
         КонецЕсли;
...
КонецЦикла;
Показать


Сразу скажу, что используемые таблицы занимают немного места. Кто нибудь подскажет, как сделать, чтобы после записи каждого документа он не оставался в памяти.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 17.08.15 17:36 Сейчас в теме
(1) wposta, переписать объектной обращение на табличной. Короче: используйте запрос.
4. CaptainMorgan 17.08.15 19:45 Сейчас в теме
(1) попробуйте выполнять процедуру не на клиенте а на сервере.
Это позволить снять проблему.
5. spacecraft 17.08.15 19:56 Сейчас в теме
(4) CaptainMorgan, "СоздатьДокумент", "ПолучитьОбъект()" и т.д. на клиенте?
Процедура только на сервере и возможна.
8. a_titeev 31 18.08.15 00:33 Сейчас в теме
(1) wposta, и да. он остается в памяти. это называется кэш :) и да. думаю, наполняется он в том числе благодаря разыменованию ссылки и ПолучитьОбъект()
кто-то на мисте когда-то приводил ответ 1С:
"Размер кеша определяется, как минимальное значение из объема доступной оперативной памяти компьютера и объема доступного виртуального адресного пространства процесса. При приближении объема занятого виртуального адресного пространства процесса 1С:Предприятия к этой величине кеш объектов начинает освобождаться форсированно. Возможности изменения правил вычисления максимального объема кеша объектов не предусмотрено."
2. dj_serega 392 17.08.15 17:32 Сейчас в теме
Попробуйте в транзакции выполнять итерацию цикла.
6. Dnki 4 17.08.15 22:54 Сейчас в теме
А тут ли проблема?
* А вдруг ЭксМЛ жрет? Докажите свою уверенность (себе в т.ч.).

* Данный тест не должен жрать память. Только не видно команды Записать()

* Далее. Вот эта мысль не ясна:
ПоискДок = ВсеДопРеквизиты.Найти( Строка(Док.Номер) + "_" + Док.Дата);


Т.е. ищется не сам документ в базе, а его реквизиты в каком-то наборе данных.
Не шибко правильно.
7. Armando 1400 17.08.15 23:47 Сейчас в теме
(0) Переменная "Док" это данные ссылочного типа? Получение через точку от ссылки очень вредно. Во-первых, из базы считывается весь объект. Вообще весь, со всеми табличными частями; во-вторых, полученный объект кэшируется, т.е. "застревает" в памяти.
Избавься от получения через точку. Вытаскивай данные запросом. Расход памяти точно уменьшится.
Если результат не удовлетворит, есть еще мысли.
dj_serega; +1 Ответить
9. wposta 15 20.08.15 20:41 Сейчас в теме
Armando и a_titeev огромное спасибо, кажется именно то что нужно
10. wposta 15 20.08.15 20:59 Сейчас в теме
И всем спасибо, действительно на данный момент самое серьезное сообщество, все профи...
dj_serega; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот