Имя: Пароль:
1C
1С v8
v8: Утечка памяти при работе с ТабДок
, ,
0 Подскажите_Мне
 
20.11.13
01:41
Короче привет всем.

Проблема с утечкой памятью в 1С, это старо как дерево в моем дворе.\

Есть конфигурация УАТ(упр. авто. трансп.), там есть печатная форма, сама по скебе она большая, много изображений и т.д., сам файл обработки весит 20 метров.

В печатной форме нужные изображения, схема и т.д.
Печатают такие формы по 140 штук в день минимум.\

Процесс:
диспетчер заходит в документ, там жмет "печать" и выводится табличный документ, потом посылает на печать.

В этом и вся проблема, именно при выводе табличного документа, отнимает примерно 80 мб ОЗУ.

Если диспетчер закрыл печатную форму и документ, перешел к другому документы и опять сделал печать, ОЗУ опять!!! растет и так бесконечно.

То есть если он напечатает 10 документов, ОЗУ возрастает на 800 000 кб(800 метров), и все начинает виснуть просто ужасно, пока 1С не перезапустят.

Как решить проблему?
Делал анализ, в момент формирования ТабДок оперативу не есть вообще,
НО только при ТабДок.Показать() отнимает 80 метров сразу.

Пробовал
ТабДок.Показать()
ТабДок.Очистить()
ТабДок = ""

Он показывает документ, сразу его очищает, НО при этом оперативу не освобождает, а так и кушает 80 метров, даже очищая табдок, то-есть как я понимаю он ещё в другом месте хранит табдок при выводе. (может кэш)
1 H A D G E H O G s
 
20.11.13
01:42
Держи, читай, страдай
v8: Что в памяти тебе моей...
2 КонецЦикла
 
20.11.13
01:51
Насколько умен механизм куч Windows

Может перефразировать: насколько успещно 1С им пользуется?
По-моему уже давно 1С нас%ать на память и HDD. Хомячки и так довольны.
3 Подскажите_Мне
 
20.11.13
01:54
Не знаю какие хомячки довольны, у меня диспетчера не могут печатать, после 12 печатей, оператива возрастает до 1ГБ и это на один процесс. Почему нельзя все сделать нормально...
4 Подскажите_Мне
 
20.11.13
01:54
Может есть стороннии DLL библиотеки? для сброса памяти которая в резерве.
5 Подскажите_Мне
 
20.11.13
01:56
хз полезно ли, с ИТС:

"В платформе 1С:Предприятие 8 используется стратегия управления временем жизни объектов, основанная на подсчете ссылок на объекты - reference counting. Данная стратегия заключается в следующем. Каждый объект платформы содержит счетчик ссылок. При появлении ссылки на объект (объект присваивается какой-либо переменной) происходит увеличение счетчика на единицу, при уничтожении подобной ссылки - значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю. "
6 Подскажите_Мне
 
20.11.13
01:58
Ну и далее:

"
Особенностью подсчета ссылок на объекты является возможность организации "циклической ссылки". Циклическая ссылка возникает, когда объекты начинают ссылаться друг на друга. Это приводит к ситуации, при которой ни один из объектов, участвующих в циклической ссылке, не будет уничтожен. В свою очередь это является причиной возникновения утечек памяти (memory leaks).

Необходимо, по возможности, избегать появления циклических ссылок. Соблюдение достаточно простых правил при разработке конфигураций позволит избежать проблем связанных с циклическими ссылками. В случае появления подобной ссылки необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом.

Полный перечень случаев возникновения циклической ссылки привести невозможно, приведем лишь некоторые примеры:

хранение в переменной модуля объекта (набора записей, формы) ссылки на данный объект (набор записей, форму) - ситуация приводит к появлению циклической ссылки - объект (набор записей, форма) никогда не будет уничтожен;
хранение ссылки на владеемый объект в объекте-владельце и ссылки на объект-владелец во владеемом объекте - оба объекта никогда не будут уничтожены.
Следует обратить внимание, что, помимо переменных модулей, ссылки на объекты могут образовываться при передаче их в методы встроенного языка. Например, добавление в список значений нового значения - этого же списка значений, приведет к появлению циклической ссылки.
"
7 H A D G E H O G s
 
20.11.13
02:09
(6) Запей, это муть. Картинки жрут память только влет, это ущербный GUI, еще времен GDI/GDI+
8 Подскажите_Мне
 
20.11.13
02:11
(7) во всех норм языка есть сброс памяти переменной.

delphi(pascal) FreeAndNull

php - unset

но только не в 1С
9 H A D G E H O G s
 
20.11.13
02:12
(8) Это только изнанка.
10 Aleksey
 
20.11.13
02:42
Это что за печатная форма такая, что то у меня из УАТа печатают, такой проблемы не встречал
11 Подскажите_Мне
 
20.11.13
02:46
(10) нормальная не стандартна печат. форма.
При открытии выделяет ей 20 метров, при закрытии освобождает её 20 метров. НО сам табдок 80 метров не освобождает.

Скажите, вариант печатать НЕ через 1С ? Например собрать ТабДок, сохранить в файл и сразу начать печать файла? Автоматом?
12 GROOVY
 
20.11.13
02:53
(11) Так может дело в дебильном табДок который нестандартно формируется?
13 Подскажите_Мне
 
20.11.13
02:54
(12) в смысле? что же в нем не так?
При формировании от не забирает память, только при Показать жрет 80 метров.

Само собой это из за больших и качественных картинок в нем, но без них никуда. Как вариант сжать картинки из вне, но это не решает проблему, память будет расти всегда.
14 GROOVY
 
20.11.13
02:56
(13) Мда... И это называется "утечка памяти"?
15 Подскажите_Мне
 
20.11.13
02:58
(14) тему прочитать не вариант?
После печати, закрытия печатной формы и закрытия документа, память НЕ освобождается, это называется утечка памяти и после 12 печатий, ОЗУ занимает 1ГБ и все умирает.
16 Подскажите_Мне
 
20.11.13
02:59
(14) про обработку(печать форму), там 4 макета, в каждом схема картинки на 3 метра.
То-есть при печати выводится один макет на котором изображение весом 3 метра, НО занимает этот ТабДок 80 метров ОЗУ и не освобождает.
17 GROOVY
 
20.11.13
03:00
Ну не знаю, печатаем прайс с картинками, таких траблов не замечено. Может платформу обновить?
18 H A D G E H O G s
 
20.11.13
03:01
(17) Это давно известная проблема, берет начало с появления 8.2
19 Подскажите_Мне
 
20.11.13
03:01
(17) какая у Вас ?

Проверял на 8.3.3.641 и 8.2.16.363
20 GROOVY
 
20.11.13
03:04
Рабочая 8.2.19.76
Тестим еще и на 8.3.4.317

Проверю завтра несколько документов подряд распечатать.
21 H A D G E H O G s
 
20.11.13
03:07
(20) че там проверять.

Открой и закрой любой рисунок размером 10 метров
22 Подскажите_Мне
 
20.11.13
03:07
(20) можно не до конца печатать, а что бы показывал табдок и сделать предосмотр и так к другим
23 H A D G E H O G s
 
20.11.13
03:18
(22) Есть идейка.
Давай я тебе Нетленку 3.0 сброшу, там будет функция вытеснения физической памяти в виртуальную. Это может помочь.
24 Подскажите_Мне
 
20.11.13
03:30
(23) что это? доп dll ? кидай.
Пока с помощью моей любимой тулзы RIOT (сжимает картинки для сайтов) сжал картинку одного макета с 3 метров до 600кб (почти без потери), проверю мож меньше памяти покушает
25 H A D G E H O G s
 
20.11.13
03:41
ушло
26 programmist1cswworld
 
20.11.13
03:51
Что-то знакомое...
уходит а потом сразу возвращается
27 Sammo
 
20.11.13
04:36
Было подобное на 8.1 еще.
Решалось то ли присвоить Неопределено, то ли еще как

Кстати вопрос - следующий документ при печати это ведь Новый ТабличныйДокумент?
28 Подскажите_Мне
 
20.11.13
06:20
(27) конечно.

Думаешь сделать ТабДок глобальным? и каждый раз сувать?

Пока я сжал обработку 20 метров, в 5 метров (сжал все картинки 8 штук). Уже стало получше, хотя так же оперативу кушает под 70 метров.
29 ЧеловекДуши
 
20.11.13
07:19
(28) Попробуй картинки сжать до разумных размеров, не 2000 на 4000 :)
30 ЧеловекДуши
 
20.11.13
07:19
+(28) Ты единственный и неповторимый... Пиши правильные нетленки
31 Подскажите_Мне
 
21.11.13
02:55
Все решил идеально, утечки больше нет.

Причина не в ТабДок, причина в ПолучитьМакет.

описал решение тут http://contrbug.ru/thread.php?id=30
32 programmist1cswworld
 
21.11.13
03:17
Не обращайте на меня внимание
(к/ф Кто подставил кролика Роджера)
33 programmist1cswworld
 
21.11.13
03:18
Ой. А как правильно внимание или внимания?
34 ДенисЧ
 
21.11.13
04:24
(31) "Теперь меняем внешнею"
Расстрелять....
35 Подскажите_Мне
 
21.11.13
04:37
(34) из за одной опечатки расстрелять? прошли времена 90х, сейчас уже нормальные люди даже не обращают внимание на ошибки в тексте, тем более в интернете
36 ДенисЧ
 
21.11.13
04:39
(35) Значит, будут расстреливать ненормальные, типа меня.
37 Подскажите_Мне
 
21.11.13
04:52
(36) сил хватит? перестаньте жить в иллюзии, расстрел давно отменили
38 H A D G E H O G s
 
21.11.13
11:35
(37) Там, в этих макетах, рисунки одни и те же?