Имя: Пароль:
1C
 
Как ускорить запись элемента в справочник
Ø
0 ScareCrow
 
19.09.06
11:10
При массовой загрузке справочника на первом месте стои Спр.Записать()..
как можно ускорить это дело?
p.s. при установке перед цикломзакрузки елементов НачатьТранзакцию(), а после цикла - ЗафиксироватьТранзакцию(); скорость возрасла с 1300 элементов в минуту до 1500 элементов в минуту..
1 Бешеная Нога
 
19.09.06
11:12
фиксируй транзакцию через каждые 100, 500, 1000 элементов,
нужное тебе число найдешь экспериментально
2 lalex23
 
19.09.06
11:12
транзакцию через сколько фиксируешь?
база дбф или скуль?
3 ScareCrow
 
19.09.06
11:14
(2)база скуль..
(1) хм.. а что так быстрее будет?
4 lalex23
 
19.09.06
11:15
(3) вроде на скуле пофигу - транзакция или нет
быстрее на дбф в разы
5 ScareCrow
 
19.09.06
11:15
Сейчас транзакция фиксируется 1 раз - после цикла..
6 skunk
 
19.09.06
11:19
еще можно память подчищать... тоже не много прибавит в скорости...
7 lalex23
 
19.09.06
11:21
(5) а скока элементов в цикле ВСЕГО?
8 КонецЦикла
 
19.09.06
11:22
2(4) Данунаф?
2(5) Уже все написали. По 100, 200 и т.п. элементов
9 ScareCrow
 
19.09.06
11:23
для этого справочника 6 с половиной тысяч.. у самого большого - 90 тысяч..
10 lalex23
 
19.09.06
11:29
(8) по поводу пофигу скуля? ну я ж не утверждаю, попробовать не начем, просто где то слышал
(9) а чё их часто надо перегружать ВСЕ 90 тысяч? если не секрет - а нафиг?
11 ScareCrow
 
19.09.06
11:33
(1) хм.. разница есть - но не большая.. в пределах сотни элементов в минуту
(10) ну не все.. загружаются только новые или измененные.. просто баз несколько - а справочная информация вбивается в одну..
12 ScareCrow
 
19.09.06
11:35
а если Стр.Записать() вынести за пределы цикла - что будет?
13 lalex23
 
19.09.06
11:37
(12) :)
НИЧЕГО не будет - буквально
пройдёт цикл и запишется или последний или ошибку выдаст, смотря какая конструкция в цикле
14 КонецЦикла
 
19.09.06
11:37
2(12) А вот это не надо :)
Покажи как фиксируешь транзакцию.
15 ScareCrow
 
19.09.06
11:39
  н1 = н1+1;
      н=н +1;
      Если Н1>= 500 Тогда
        н1=0;
        ЗафиксироватьТранзакцию();
        НачатьТранзакцию();
      КонецЕсли;
      Состояние("Обрабатывается элемент "+н+"/"+ИЛТЗ.КоличествоСтрок());
    КонецЦикла;
16 aKomper
 
19.09.06
11:39
1С++
17 ScareCrow
 
19.09.06
11:43
для справочников где реквизитов мало, а элементов много - скорее всего так и сделаю.. у этого же 45 реквизитов..
18 Чучундер
 
19.09.06
12:04
Напиши условие вместо
Н1>= 500
такое
(Н1-500) >= 0
- тоже даст некий прирост скорости именно на проверке условия - условие будет отрабатывать примерно на 10% быстрее
19 ScareCrow
 
19.09.06
12:09
это условие примерно на сотой строчке замера...
20 КонецЦикла
 
19.09.06
12:11
2(15) Напиши еще перед циклом Начать и после цикла - Зафиксировать
А то что-то может потеряться
21 ScareCrow
 
19.09.06
12:11
щас перепишу всякие НайтиПоКоду на прямые запросы.. ну наверно и все..
22 Drovaru2
 
19.09.06
12:16
Уважаемые,а где можно посмотреть такие хитрости как в (15) и (18), скажем так, более полным списком с процентом прироста? 1С v7.7 релиз 25.
P.S. исключая мИсту... там уже усё прочитал
23 КонецЦикла
 
19.09.06
12:24
2(21) Это еще зачем? Ну если в целом для всех - может быть...
2(22) Если все прочитал - значит все и так знаешь :)
24 Vacony
 
19.09.06
12:29
Думается кроме Танзакций было бы не плохо код увидеть - тогда можно сказать - есть там что оптимизировать или нет.