Имя: Пароль:
1C
 
Вопрос по сжираемой памяти.
0 Eugeneer
 
25.08.22
23:09
В результате мощной обработки (400 000 строк) 1С в памяти отожралась с 1.5 гига до 5 гиг оперативки.

И продолжает с таким же размером висеть после закрытия обработки. В чем прикол?
1 Eugeneer
 
25.08.22
23:15
Ох нифига себе прикол!

В диспетчере.

У меня была запущена 1С. И я ее не закрывал!

Запустил один раз обработку (как писал сожрала 5 гиг). закрыл обработку, 1С осталась. И решил заново запустить.

А в диспетчере появился второй экземляр 1С (хотя фактически всего 1) и тоже начала сейчас сжирать 5 гиг.....

Чота я не понял юмора это как так. 1С кстати файлов....

Запущена одна, а в оперативке отобраэается 2. И обе по 5 гиг сожрали.

Сейчас ради прикола еще третий раз запущу.
2 H A D G E H O G s
 
25.08.22
23:16
Единственным благом является знание, а единственным злом – невежество.
3 palsergeich
 
25.08.22
23:18
(0) сегодня обрабатывал 30 000 000 строк.
память не отожралась.
После закрытия обработки 20 ГБ, которые она съела - очистились.
Ищи проблему в коде)
4 Eugeneer
 
25.08.22
23:18
Третий раз не появилась. Но в диспетчере отображаются 2 запущенных 1С по 10 гиг.
Хотя открыта фактически одна.
5 Eugeneer
 
25.08.22
23:19
(3) голову сломал. не могу найти хоть тресни.
6 Eugeneer
 
25.08.22
23:19
Работает быстро. 400к строк обрабатывается всего 30 секунд.
И другие вещи тоже вообще за секунды.

Но память отпускать не хочет. И еще как то баг что две 1С.
7 Eugeneer
 
25.08.22
23:21
Пипец. заработался. я две запустил)))) сорян.
8 Eugeneer
 
25.08.22
23:22
Лдано короче. 5 гиг фигня. На таком обьеме обработки. Позапускал еще. Больше 5 не жрет. На файловой.

После закрытия отпускать память не хочет. Фиг с ним.
9 Фрэнки
 
25.08.22
23:31
вообще-то от релиза платформы зависит. Т.е. на некоторых ситуация совсем невыносимая, а на некоторых терпимее.

Но на всех в 1С уборкой мусора в памяти дела обстоят плохо. И никогда не было и видимо не будет явных деструкторов объектов. Хотя в Си, на котором собственно и разработана платформа, эти самые деструкторы в наличии.
10 Krendel
 
25.08.22
23:45
(9) упрутся в производительность-будут
11 H A D G E H O G s
 
25.08.22
23:49
(10) Один и тот же код, выполняемый в 1С, примерно в 12 раз медленнее выполняемого на Java
12 VS-1976
 
26.08.22
00:08
Что-то кэширует, а сборщик мусора отдыхает )
13 VS-1976
 
26.08.22
00:13
Если обработка использует память в больших объёмах, то нужно при написании освобождать по мере отпадания потребности: ДофигаПамяти = Неопределено;
14 Krendel
 
26.08.22
00:15
(11) Как мне дир говорил,

база начала откликаться в 3 раза медленнее, мы росли на 30% в год, потом отклик с секунды ушел за 3, и компания удвоилась, думаю что будет если остановить ее нахрен ;-)
15 Сергиус
 
26.08.22
03:11
(0)Небось какой-ть объект не убил, вот он в памяти и остался.
16 Eugeneer
 
26.08.22
06:53
В общем из огромного кода мне стало доподленно известно что память сжирается в результате заполнения ТЧ обработки.

Выявил это путем комментирования участка кода где она заполняется.

Прикол в том что она заполняется из такой же ТЗ (которая висит в хранилище), такого же размера строк.

Те занимает память именно ТЧ обработки. При закрытии обработки память не чистится. Хотя ТЧ является реквизитом.
17 rphosts
 
26.08.22
06:59
(0) 400 000 строк кода?
18 NorthWind
 
26.08.22
06:59
(9) уже лет 20 смарт-поинтеры используются. И это С++, а не С.
19 rphosts
 
26.08.22
07:00
(16) кто тебе сказал, что в хранилище (даже без сжатия) и в памяти будет занимать одинаковое место, сам придумал или подсказал кто-то?
20 rphosts
 
26.08.22
07:01
(9) раз в 20 мин приходит мусорщик и кэш шринкуется
21 Eugeneer
 
26.08.22
07:02
Причем прикол в том что я даже убрал данные это ТЧ - просто создание пустых строк.


Сейчас ради прикода просто создам пустую обработку с ТЧ и сгенерирую в ней 500к строк. гляну как память жрать будет
22 Eugeneer
 
26.08.22
07:03
Блин пацаны ну это бред чтобы ТЧ в сотни тысяч строку (даже пустая) жрала 3 гига оперативки.
23 Eugeneer
 
26.08.22
07:12
Хахах. Ля прикол...

Создал обработку с нуля. 30 строк кода. Обработку с ТЧ и создал процедуру в 10 строк генерирующую там указанное количество строк.

И что вы думаете. Жрет память)
24 Eugeneer
 
26.08.22
07:13
Сейчас закрою ее. И подожду 20-30 минут.
25 NorthWind
 
26.08.22
07:14
(22) значит, механизм ТЧ в памяти, который сделан для отчетов и обработок, не рассчитан на большое к-во данных. Попробуйте ТЗ или еще что-то.
26 NorthWind
 
26.08.22
07:16
Если завести ТЗ на сервере и засрать ее таким же количеством строк - расход тот же?
27 Eugeneer
 
26.08.22
07:18
(25) фигово как то с ТЗ формы. совсем не подходит. тут вариант может быть пробовать Табличный документ и через него работать.
28 Eugeneer
 
26.08.22
07:18
(26) я ее и делаю на сервере. в модуле обработки идет заполнение.
29 Strogg
 
26.08.22
07:18
(23) всего 2 варианта: либо после обработки происходит какая-то транзакция в бд, в результате чего и отжирается память, либо твой запрос на 3 строчки раскладывается в кластере на 3 страницы, захватывая для чтения всю бд и в плане запроса в профайлере в нем куча строк. Но это для скульных баз. У тебя такая?
30 Eugeneer
 
26.08.22
07:23
Количество реквизитов не имеет значения. В моей десятки самых разны (есть и неограниченной длины).

В пустой обработке я сделал всего два со строкой длинной 10. Память жрется даже если не заполнять реквизиты, просто пустые строки.
31 Eugeneer
 
26.08.22
07:25
А вот ПРИКОЛ. поставил сделать 99 999 строк. Заполнились за 1 секунду и памяти выросло всего 30 мегабайт.
32 NorthWind
 
26.08.22
07:29
Скорее всего работа с этими ТЧ внутри 1С сделана без учета того, что кто-то будет туда пихать сотни тысяч строк. По идее, что можно хранить в ТЧ обработки? Ну настройки какие-нибудь переменной длины, это десятки строк, ну сотни максимум. Полагаю, примерно так они и думали.
33 Eugeneer
 
26.08.22
07:35
Бред. Меняю количество генерируемых строк. Уже не жрет.

Сейчас пытаюсь тестить на добавленных реквизитах. Все таки зависимость есть.
34 NorthWind
 
26.08.22
07:38
(33) ну резонно. Меняй в сторону уменьшения самих реквизитов, их количества и колоичества строк - и жрать перестанет :)
35 Eugeneer
 
26.08.22
07:38
(32) я тестирую на на 99 999, 200 000, 400 000. Случайно поставил 4 миллиона даже.

Есть зависимость от количества реквизитов которые даже не заполняю.
36 Eugeneer
 
26.08.22
07:47
Сделал ТЗ формы - ничего не жрет.
Сделал ТЗ в коде (через переменную) - ничего не жрет.
37 Eugeneer
 
26.08.22
07:55
КОроче. нафуй......

То жрет то не жрет. И таблица формы уже начала жрать как только реквизиты добавил. и ТЧ жрет. Все жрет.

Зависимость от реквизитов есть. Причем даже если их не заполняем.

Видимо все таки таблица растет и все реквизиты что в ней ее раздувают, даже если пустые.

Нифига не понятно только почему 1С на такую хрень гигабайты тратит.
38 Eugeneer
 
26.08.22
07:56
Работает все быстро. И 400к строк в принципе за секунды создается. Но память убивается.