Имя: Пароль:
1C
1С v8
Скорость записи в регистр накопления падает по мере увеличения количества записей
, ,
0 mikhailovaew
 
16.06.17
17:47
1С 8.2. Запросом получаю данные, 50000 строк. Построчно добавляю записи в регистр накопления. При этом первые несколько сотен записей производятся моментально, но каждая последующая запись делается медленнее предыдущей, и после 20000 это уже очень заметный лаг. Можно ли с этим как-то бороться?
1 Волшебник
 
модератор
16.06.17
17:48
фиксируй транзакцию каждые 100 записей
2 Fragster
 
гуру
16.06.17
17:48
приведи код
3 mikhailovaew
 
16.06.17
17:50
Выборка = Результат.Выбрать();
    Кол = Выборка.Количество();
    Сч = 0;
    Пока Выборка.Следующий() Цикл
        Сч = Сч + 1;
        Движение = Движения.МойРегистр.Добавить();
        ЗаполнитьЗначенияСвойств(Движение,Выборка);
        Если Сч%100 = 0 Тогда
            Состояние("СФРВ: загружено "+Сч+" строк из "+Кол);
        КонецЕсли;
    КонецЦикла;
    Движения.МойРегистр.Записать();
4 Джинн
 
16.06.17
17:50
(0) Через набор записей добавляете?
5 mikhailovaew
 
16.06.17
17:50
то есть  Движения.МойРегистр.Записать() делать через каждые 100 записей?
6 mikhailovaew
 
16.06.17
17:50
(4) через свойства Движения самого документа-регистратора
7 Fragster
 
гуру
16.06.17
17:51
а на какой строке тормозит? Движение = Движения.МойРегистр.Добавить();?
8 Лефмихалыч
 
16.06.17
17:52
не удивительно.
надо Записать(ложь).
9 mikhailovaew
 
16.06.17
17:52
(7) нет, именно в процессе добавления, еще ДО записи
10 Fragster
 
гуру
16.06.17
17:52
(8) отнюдь
11 mikhailovaew
 
16.06.17
17:52
(8) до записи еще не доходит в момент лага
12 Fragster
 
гуру
16.06.17
17:53
(9) а я как написал?
13 Волшебник
 
модератор
16.06.17
17:53
(5) Сделай 10 документов по 5000 записей в каждом
14 Лефмихалыч
 
16.06.17
17:53
(11) так у тебя добавление в набор тормозит?
15 Лефмихалыч
 
16.06.17
17:53
в набор можно тупо Загрузить(Выгрузить())
16 mikhailovaew
 
16.06.17
17:53
(7) (11) там всего 2 строки: добавить и заполнить значения. в какой-то из них тормозит все сильнее по мере добавления в набор
17 mikhailovaew
 
16.06.17
17:54
(15) именно так сначала и было, потребовали вывести индикацию что происходит, ибо задумается база на час
18 Лефмихалыч
 
16.06.17
17:55
(16) какую-то ты фигню рассказываешь
19 mikhailovaew
 
16.06.17
17:55
(18) не было б фигни - не было б вопроса
20 Лефмихалыч
 
16.06.17
17:56
(19) результат замера производительности покажешь?
21 mikhailovaew
 
16.06.17
17:56
Вот это вот Состояние("СФРВ: загружено "+Сч+" строк из "+Кол) как раз четко показывает, что первые сотни добавляются моментально, а дальше все медленее и медленнее. После 20 000 по нескольку секунд, после 30 000 уже почти по минуте
22 mikhailovaew
 
16.06.17
17:56
визуально видно)
23 Лефмихалыч
 
16.06.17
17:58
(22) визуально - это фигня и есть. Замер покажи, потом будут разговоры
24 mikhailovaew
 
16.06.17
17:58
я так понимаю, Вы с данной проблемой не сталкивались
25 Лефмихалыч
 
16.06.17
17:58
любая оптимизация обязана начинаться с замера производительности, а не с обговления кода
26 Лефмихалыч
 
16.06.17
17:59
(24) ты овощей за жизнь столько не съела, со скольким количеством разных, и таких - тоже, проблем сталкивался.
Замер сделай, потом поговорим
27 mikhailovaew
 
16.06.17
18:01
(25) 96% на строке Движение = Движения.МойРегистр.Добавить();
что это дает?
28 mikhailovaew
 
16.06.17
18:01
уже 99%
29 Лефмихалыч
 
16.06.17
18:02
(27) это значит, что дело не в твоем коде, а в твоем железе.
30 Лефмихалыч
 
16.06.17
18:02
хоттяя... верни Загрузить(Выгрузить()) и повтори замер
31 mikhailovaew
 
16.06.17
18:04
пока не могу. час грузить, ему осталась еще 5000 записей. пусть догрузит, потом верну и померяю.
32 mikhailovaew
 
16.06.17
18:07
(30) а что там мерить? сколько по времени займет строка Загрузить и будет ли это быстрее построчного обхода?
33 mikhailovaew
 
16.06.17
18:10
(13) то есть падение производительности при росте количества записей - это нормально и иначе как дроблением регистраторов проблему не решить?
34 youalex
 
16.06.17
18:26
(0) Памяти сколько? вообще, свободно, и у приложения при замедлении? база файловая/серверная?
35 H A D G E H O G s
 
16.06.17
18:49
Я думаю, чудес не бывает и мы видим не весь код
36 H A D G E H O G s
 
16.06.17
18:49
Я даже могу подключиться и потыкать автора
37 ILM
 
гуру
16.06.17
19:00
Грузите порциями по 10 тыс записей. Пример кода есть в УПП, запись порциями в регистры затрат при проведении РСВ.
38 mexanik_96
 
16.06.17
19:04
(25)+100500 автор, ты бы хоть замер профайлером сделал если клиент-сервер, если фб тогда тж
39 Fragster
 
гуру
17.06.17
14:26
не кончается ли у автора оперативка?
40 rphosts
 
17.06.17
14:39
(3) сдается мне, что пока не вернуть управление клиенту область панели состояние обновлено не будет, а в этом коде возврата на клиента как-то не предвидится