ЗаполнитьЗначенияСвойств ускорить можно? #689009


#0 by Дтл
ЗаполнитьЗначенияСвойств быстрее будет если на присвоения свойств переписать или ещё как?
#0 by Дтл
ЗаполнитьЗначенияСвойств быстрее будет если на присвоения свойств переписать или ещё как?
#1 by 1dvd
Что, сильно тормозит?
#2 by Дтл
да
#3 by acsent
Пруф
#4 by Дтл
что?
#5 by acsent
Что что?
#6 by Дтл
что значит "пруф" здесь?
#7 by 1dvd
замерь производительность, сделай скриншот и покажи нам. ЗЫ
#8 by 1dvd
это значит "доказательство"
#9 by sanja26
Пруфлинк =пруф
#10 by H A D G E H O G s
Ну тормозит, но это пфффф, мелочи. Забей.
#11 by WildSery
Да, будет быстрее. Нет, сильно не тормозит.
#12 by Дтл
раз в 10 ?
#13 by Бешеная Нога
интересно как же оно тормозит. сколько выполняется ЗаполнитьЗначенияСвойств?
#14 by Лефмихалыч
откуда уверенность, что тормозит именно этот вызов? Замер производительности есть?
#15 by Euguln
Используй третий и четвертый параметры.
#16 by Дтл
если  третий используется имеет смысл четвертый? да много и дольше всего да
#17 by Maxus43
код в студию + показания замера, это лёгкая операция, что-то не то у вас в коде
#18 by Дтл
хорошо как дойдет до этого в очередной раз - выложу и показания
#19 by Бешеная Нога
ЗаполнитьЗначенияСвойств(НоваяСтрока, ПолучитьЗначенияДляЗаполненияПослеПроведенияРСВЗаПоследнийГод);
#20 by Бешеная Нога
не?
#21 by Дтл
может и это тоже но я видел в ут11 место где там подряд два заполнения идут при формировании движений по партиям товаров и ндс. померять у меня ума хватило. там на интервале в несколько десятков минут это самые долгие операции. просто интересно если кто уже заменял на присвоение значения сколько это времени сократило и зависит ли от типов. сам это всё равно попробую позднее если только технически всё станет по двум месяцам и останутся вопросы скорости для остального периода.
#22 by Maxus43
Это операция ОЧЕНЬ лёгкая, значит проблема не в ней, а в получении данных для заполнения
#23 by Дтл
это ОЧЕНЬ тонкий намек ))) куда копать?
#24 by Maxus43
Код покажи, хватит гадать на кофейной гуще, тут не Хогвардс
#25 by Darth Anyan
может, вот эта функция время отъедает? Или есть возможность ее вообще выполнить 1 раз и закэшировать результат куда-нибудь?
#26 by Maxus43
мы не знаем что там за код, это не от автора, это попытка телепатии была
#27 by Дтл
ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 405    ЗаполнитьЗначенияСвойств(ЗаписьНабора, СтрокаОстатка,, "Количество, Стоимость, СтоимостьБезНДС, СтоимостьРегл, НДСРегл");    6    4,668468    62,69     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 406    ЗаполнитьЗначенияСвойств(ЗаписьНабора, Расход, "Период, Регистратор, СтатьяПотребления, АналитикаПотребления, ДокументРеализации, ЭтоВозврат");    5    0,935035    12,56     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 399    Остаток.Стоимость       = 0;    5    0,156804    2,11     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 402    Остаток.НДСРегл         = 0;    5    0,155993    2,09     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 400    Остаток.СтоимостьБезНДС = 0;    5    0,155908    2,09     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 401    Остаток.СтоимостьРегл   = 0;    5    0,155809    2,09     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 408    ЗаписьНабора.ВидДвижения                = Расход.ВидДвижения;    5    0,136740    1,84     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 409    ЗаписьНабора.МоментВремени              = Новый МоментВремени(Расход.Период, Расход.Регистратор);    5    0,109337    1,47     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 410    ЗаписьНабора.ИсходноеКоличество         = РаспределенныйРасход.Количество;    5    0,109290    1,47     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 413    ЗаписьНабора.ИсходнаяСтоимостьРегл      = РаспределенныйРасход.СтоимостьРегл;    5    0,109039    1,46     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 411    ЗаписьНабора.ИсходнаяСтоимость          = РаспределенныйРасход.Стоимость;    5    0,108970    1,46     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 412    ЗаписьНабора.ИсходнаяСтоимостьБезНДС    = РаспределенныйРасход.СтоимостьБезНДС;    5    0,108936    1,46     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 414    ЗаписьНабора.ИсходныйНДСРегл            = РаспределенныйРасход.НДСРегл;    5    0,108907    1,46     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 416    ЗаписьНабора.ЗаписьВРегистр             = Истина;    5    0,108587    1,46     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 398    Остаток.Количество      = 0;    5    0,076558    1,03     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 326    Остатки.Индексы.Добавить("Номенклатура");    6    0,022402    0,30
#28 by Дтл
#29 by Dmitry1c
Дтл - это слово без единой гласной буквы?
#30 by Дтл
ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 412    ЗаписьНабора.СтоимостьБезНДС = СтрокаОстатка.СтоимостьБезНДС;    5    0,885091    3,65     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 433    ЗаписьНабора.ИсходныйНДСРегл            = РаспределенныйРасход.НДСРегл;    5    0,895292    3,69     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 432    ЗаписьНабора.ИсходнаяСтоимостьРегл      = РаспределенныйРасход.СтоимостьРегл;    5    0,910266    3,75     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 431    ЗаписьНабора.ИсходнаяСтоимостьБезНДС    = РаспределенныйРасход.СтоимостьБезНДС;    5    0,958894    3,95     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 430    ЗаписьНабора.ИсходнаяСтоимость          = РаспределенныйРасход.Стоимость;    5    0,965688    3,98     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 412    Остаток.Количество      = Остаток.Количество - РаспределяемоеКоличество;    4    1,389572    5,73     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 416    Остаток.НДСРегл         = Остаток.НДСРегл - Расход.НДСРегл;    4    1,422046    5,86     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 415    Остаток.СтоимостьРегл   = Остаток.СтоимостьРегл - Расход.СтоимостьРегл;    4    1,533459    6,32     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 413    Остаток.Стоимость       = Остаток.Стоимость - Расход.Стоимость;    4    1,608745    6,63     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 414    Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС;    4    1,621341    6,68 как-то можно ускорить или может быть переписать сами расчеты? кто-нибудь делал?
#31 by Дтл
точнее вот это     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 414    Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС;    1    0,443816    6,32     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 415    Остаток.СтоимостьРегл   = Остаток.СтоимостьРегл - Расход.СтоимостьРегл;    1    0,449871    6,41     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 412    Остаток.Количество      = Остаток.Количество - РаспределяемоеКоличество;    1    0,459970    6,55     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 413    Остаток.Стоимость       = Остаток.Стоимость - Расход.Стоимость;    1    0,507228    7,23
#32 by hhhh
что-то гоните. Ну не может Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС выполняться полсекунды.
#33 by H A D G E H O G s
Давай я подключусь к тебе, гляну на кот и вылечу разрыв шаблона у участников этого форума и тебя в частности.
#34 by acsent
Может это 386?
#35 by Дтл
ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 414    Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС;    5    2,487962    7,31     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 415    Остаток.СтоимостьРегл   = Остаток.СтоимостьРегл - Расход.СтоимостьРегл;    5    2,577914    7,57     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 416    Остаток.НДСРегл         = Остаток.НДСРегл - Расход.НДСРегл;    5    2,606330    7,66
#36 by Дтл
через точку...
#37 by Maxus43
не могут такие простые операции столько выполнятся, ересь, ересь!
#38 by H A D G E H O G s
Че там? Документ штоле?
#39 by H A D G E H O G s
см Может там ссылочный тип.
#40 by Дтл
а вот с птичкой типа галочка )))     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 414    Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС;    1    0,504089    16,37     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 415    Остаток.СтоимостьРегл   = Остаток.СтоимостьРегл - Расход.СтоимостьРегл;    1    0,549160    17,84     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 416    Остаток.НДСРегл         = Остаток.НДСРегл - Расход.НДСРегл;    1    0,564748    18,34     ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 402    РаспределитьСуммы(СтрокаОстатка, РаспределенныйРасход, КоличествоКРаспределению);    1    2,285134    74,22
#41 by acsent
Я понял, он биткойны на сервере 1с майнит
#42 by acsent
Думаешь Остаток - это документ с 100000 строк?
#43 by Maxus43
зело подозрительно и если это так - надо вручить медаль автору сего кода
#44 by GANR
По логике вещей, если не указать процедуре заполняемые колонки - это будет по сути вложенный цикл по полям того и другого объекта с поиском одноименных. Возможно, не надо переписывать на присвоение, а просто в 3 параметре процедуры ЗаполнитьЗначенияСвойств указать колонки - и все.
#45 by H A D G E H O G s
Мы это обсудим сегодня с 19 по 21 вечера.
#46 by Дтл
ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 402    РаспределитьСуммы(СтрокаОстатка, РаспределенныйРасход, КоличествоКРаспределению);    2    2,940640    28,39     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 416    Остаток.НДСРегл         = Остаток.НДСРегл - Расход.НДСРегл;    1    0,664850    6,42     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 414    Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС;    1    0,591796    5,71
#47 by Дтл
к вот с птичкой, ошибка буфера
#48 by Maxus43
чойто по 21 вечера? рановато баиньки ещё
#49 by kiruha
Да, я переписывал Зависит от структуры источника/приемника Для 2 таблиц зн-й КолонкиИсточника=ТаблицаДанныхВрем.Колонки;     Для Каждого Колонка Из ТаблицаКолонки Цикл далее удаляешь строки которые не подходят, заполняешь вычисляемые столбцы Загрузка в набор или еще куда нужно
#50 by Maxus43
ты раскроешь нам важную военную тайну? ТИП какой у остаток и Расход?
#51 by Дтл
строка таблицы значений и структура
#52 by Дтл
спасибо, а это быстрее чем через присвоение свойств, присвоение кстати быстрее
#53 by Дтл
к ?
#54 by hhhh
всё равно, даже если и ссылка, Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС; выполняется 0,44, объект загружается в память, затем вторая строка Остаток.СтоимостьРегл   = Остаток.СтоимостьРегл - Расход.СтоимостьРегл; должна быть 0 секунд. Потому что объект уже в кеше.
#55 by Дтл
проц там E31270 3,4
#56 by Дтл
закончилось всё тем что вывалилась сессия по ошибке (забыл скопипастить но что-то там с POS ошибкой доступа к серверу) и на январе появилась зелёная галочка, есть подозрение что после расчета себестоимости сервер ушел в глюки которые я и ловил замером
#57 by kiruha
Примерно на 2 порядка быстрее для больших таблиц Но вот для "склейки" 2 таблиц значений методов не нашел
#58 by WildSery
Что такое "склейка 2 тз"?
#59 by kiruha
Это когда надо 2 ТЗ одинаковой структуры объединить в одну таблицу
#60 by WildSery
А можно поинтересоваться, в какой задаче потребовалось объединять две ТЗ с большим объёмом данных?
#61 by Дтл
ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 416    Остаток.НДСРегл         = Остаток.НДСРегл - Расход.НДСРегл;    2    3,592637    13,50     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 414    Остаток.СтоимостьБезНДС = Остаток.СтоимостьБезНДС - Расход.СтоимостьБезНДС;    1    1,829030    6,87     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 415    Остаток.СтоимостьРегл   = Остаток.СтоимостьРегл - Расход.СтоимостьРегл;    1    1,812970    6,81     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 413    Остаток.Стоимость       = Остаток.Стоимость - Расход.Стоимость;    1    1,746088    6,56 шоу продолжается... что вот в таком коде можно ещё местами переставить чтобы он заработал? сначала переменным присвоить значения полей а потом вычесть?
#62 by Дтл
ОбщийМодуль.ПартионныйУчетСервер.Модуль    8 430    ЗаписьНабора.ИсходнаяСтоимость          = РаспределенныйРасход.Стоимость;    1    0,598319    6,01     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 398    Остаток.Количество      = 0;    1    2,119650    21,30     ОбщийМодуль.ПартионныйУчетСервер.Модуль    3 399    Остаток.Стоимость       = 0;    1    2,130822    21,41 может у нас учебная версия стоит?
#63 by Дтл
rphost отожрал больше 11 гигов...
#64 by Дтл
короче после 21 гига я остановил это безумие. кто-то может подсказать куда копать в расчете себестоимости чтобы как-то частями это сделать или принудительно память заставить освобождать если есть утечка? кстати последняя платформа стабильна?
#65 by kiruha
Ищи утечку памяти - циклические ссылки, созднание обработок, активные транзакции , экспортные переменные
#66 by КонецЦикла
В снеговике все тормозит, все Это система для ларьков с понтами
#67 by КонецЦикла
И уепано закрученные типовые еще усугубляют это торможение
#68 by Лефмихалыч
переменные ЗаписьНабора, СтрокаОстатка и Расход - это что? Какой тип в них?
#69 by Дтл
см. а "ЗаписьНабора" наверное можно и не смотреть ))) методологически верное предложение но практически такой совет малопригоден )))
#70 by Дтл
и что делать?
#71 by КонецЦикла
Для оперативного учета использовать семерку или не 1С
#72 by Лефмихалыч
не слушать нытье клюшководов тут или ты что-то недоговариваешь, или проблема в конкретной конфе, конкретном сервере, конкретном чем-то еще, что у тебя там живет.
#73 by КонецЦикла
Какое еще нытье :) Если ты записывал какой-нить "набор записей", то должен быть в теме :)
#74 by Лефмихалыч
в теме чего? Что он удаляется по одной записи?
#75 by КонецЦикла
Он плохо удаляется, плохо записывается и плохо работают отборы :) Я хочу раз в 100 быстрее... и это возможно если сделать работу с БД не через ЖПО (хотя бы не в файловом варианте)
#76 by hhhh
это клюшечники не догнали пока. Набор записей записывается за сотые доли миллисекунды.
#77 by КонецЦикла
Епать... ОК, будем копать глубже А есть пример для много-много записей, мне нужно проапдейтить тупо одно поле (поставить ложь где была истина)?
#78 by Дтл
а что недоговаривать... пример один приведу только. предшественники когда их попросили развернутое сальдо убрать написали обработку которая вводит корректировку регистров по товарам на складах. учет кое-как (несколько связанных с этим проблем уже решено) вели, а когда себестоимость посчитать понадобилось думали что достаточно кнопку нажать. оказалось нет. и те кто внедрение сопровождал тоже естественно не смогли. я вот теперь сразу все косяки разгребаю. т.е. это не внезапное что-то произошло. это жизнь как говорится )))
#79 by Дтл
так как же быть с утечкой памяти? план конечно есть но может кто подскажет чего ещё?
#80 by Дтл
Up
#81 by vvp91
> Up Скажи номер версии конфигурации. И, как обычно, обновись до последней вышедшей. В использовании ЗаполнитьЗначенияСвойств и присвоениях в этом коде проблемы нет. Проблемы там в куче других мест, например в множественном применении НайтиСтроки по таблицам значений. Или в том, что таблицы значений там по сотне колонок. Странно, что именно этих проблем ты не заметил, а зациклился на присвоениях.
#82 by Дтл
я заметил то что показал замер
#83 by vvp91
> я заметил то что показал замер Плохо заметил. Точнее - плохо замерял. Замерять надо от точки входа в модуль - ВыполнитьРегламентноеФормированиеДвиженийПоПартиямТоваров.
#84 by kiruha
Я искал утечки памяти и вполне успешно. Процесс трудоемкий но вполне есть практические методы. а) Поиск незакрытых транзакций В отладчике переодически наблюдаешь состояние функции ТранзакцияАктивна естественно в тех местах где транзакции не должно быть б) Там же наблюдаешь состояние экспортных переменных - количество элементов и вложенные уровни в) Поиск обработки создать и количество их вызовов г) Циклич ссылки самое сложное Отключаешь участки кода и отслеживаешь разрастание памяти Например партионное проведение
#85 by Дтл
64 бита или 32 на сервере 1С что-то изменят?
#86 by vvp91
>> 64 бита или 32 на сервере 1С что-то изменят? Это вряд ли.
#87 by mikeA
судя по тому, что "rphost отожрал больше 11 гигов..." там уже 64 бита. на 32 битах он бы на 3 - 3.5 гигах свалился
#88 by acsent
вообщето тех журнал умеет инфу по утечкам собирать
#89 by kiruha
А как по простому не подскажешь ? Я искал по - выяснил что ЗапросРезультат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией) вызывал утечку. Не знаю что там нареализовали . Платформа 8.2.18
#90 by Дтл
а обход?
#91 by Дтл
вообще не удивительно. там сейчас кажется нет такого есть выполнить а потом обход выборок по группировкам
#92 by МихаилМ
kiruha "Но вот для "склейки" 2 таблиц значений методов не нашел" создайте пустую колонку тз  с колвом строк равным 1тз+ 2 тз поколоночно перенесите данные первой таблицы удалите пустую колонку отсортируте по непустой колонке, чтобы первая таблица оказалась внизу поколоночно перенесите данные второй  таблицы   создать пустую колонку быстрей чем через добавить можно используя для построителя запросов область тч с  нужным колвом строк
#93 by kiruha
Хм, интересно - надо поэксперементировать
#94 by Steel_Wheel
1) Писать напрямую, в виде Объект[Свойство] = МоеЗначений должно быстрее быть -- никто не знает, как ЗаполнитьЗначенияСвойств отыскивает совпадающие свойства 2) Еще, у метода ЗаполнитьЗначенияСвойств есть параметры, в котором передается список заполняемых/пропускаемых свойств. Попробуй поиграться с ними
#95 by kiruha
Вообщем пока не взлетел каменный цветок. Основная проблема - сформировать ТЗ заданного размера. Например путсую ТЗ на 10 000 строк. Можно конечно к регистру запрос - ВЫБРАТЬ ПЕРВЫЕ 10000 0 КАК Столбец ИЗ ... но так не универсально ( При использовании Добавить или Вставить - на добавление уходит много времени и суммарные выигрыш только 30%
#96 by kiruha
Все взлетело - нетривиально ) Огромное спасибо!
#97 by МихаилМ
я Вас возможно обманул: тк идею проверял в режиме отладки. без режима отладки добавить  работает примерно с такой же скоротью. проверялось на 500000 строк
#98 by ASU_Diamond
заменяли ЗаполнитьЗначенияСвойств на непосредственное заполнение в колонки ТЗ. Количество колонок в таблицах было порядка 20, из них 3 числовых. Количество строк в ТЗ порядка 100 к. Прирост получился 30%
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С