|   |   | 
| 
 | V7 производительность | ☑ | ||
|---|---|---|---|---|
| 0
    
        Eugene_a 07.07.18✎ 11:44 | 
        1С 7.70.027 на вин10.
 база DBF на сетевом диске. в ТЗ насасываются данные из справочников, потом по дням обрабатываются эти ТЗ. отчет работает 45 секунд. судя по диспетчеру задач, никакой из ресурсов не загружен даже на 50 % (только в помент запуска обработки сеть загружена, пока читаются справочники). кто не дает обработке работать быстрее? https://drive.google.com/file/d/13lQ82aV6R1f6dApnid-c9Eq3HvTD022A/view?usp=sharing | |||
| 1
    
        Djelf 07.07.18✎ 11:47 | 
        А что замер в отладчике показывает?     | |||
| 2
    
        Злопчинский 07.07.18✎ 11:57 | 
        Видимо зависит от места - на Граевке будет быстрее, на Вульке - медленнее... А в Старых Задворцах вообще может не работать.. ,;-)     | |||
| 3
    
        Aleksey 07.07.18✎ 12:08 | 
        ы проц упирается
 я так понимаю 4-х ядерник | |||
| 4
    
        Злопчинский 07.07.18✎ 12:10 | 
        Для начала замер производительности штатный, потом положи базу на локальный диск для сравнения.
 Данные тянешь выборками скорее всего. Каждый объект из выборки в полном объёме тянется из сетевой шары на локальный комп, потом наверняка куча не оптимальности по работе с тз типа много раз найти значение иили удалить строку,,, оно все в комплексе и набежало , а может быть где-то одна хрень глобальная типа на справочник из 1000 человек для каждого дня обрабатывается на каждого человека перебором 10000 записей по табел... Оппа уже 10 млн телодвижений и все это по сети дергается на каждое телодвижение | |||
| 5
    
        Злопчинский 07.07.18✎ 12:13 | 
        Цп 4 ядра, итого одно ядро = 25%, оно забито под 100%... 77 не многозадачная, трещит на одном процесс... Закрепи 77 на время выполнения за конкретным процесс ради интереса, получишь процентов 5 добавки к скорости     | |||
| 6
    
        МихаилМ 07.07.18✎ 12:34 | 
        даже на 100 мбит сети - 45 сек - очень долго. 
 выкладывайте код. | |||
| 7
    
        Eugene_a 07.07.18✎ 12:53 | 
        график по ядрам:
 https://drive.google.com/file/d/1yPJH_soDWujlmBehqnxfI1MZqUUUobuN/view?usp=sharing почему-то приложение работает поочередно на двух правых ядрах. и, действительно, загружает ядро полностью. штатно позже померяю. | |||
| 8
    
        Aleksey 07.07.18✎ 13:28 | 
        (7) Ну вот тебе и ответ.
 1С вообще и 7-ка в частности - однопоточная. И если на 8-ке через фоновые задания можно попытаться сэмулировать использования "многоядерности", то 7-ки увы - все упирается в производительности на 1 ядро. Чем она выше, тем быстрее будет работать. Максимум что ты можешь сделать без замены проца и/или его разгона - это закрепить 1с за конкретным ядром, чтобы график не скакал, что даст пару процентов прироста | |||
| 9
    
        Salimbek 07.07.18✎ 13:38 | 
        (7) Да нет проблемы - штатно померить, запускаешь 1С - отладчик, открываешь эту обработку - в начале нужной процедуры ставишь брейкпойнт - запускаешь обработку свою, настраиваешь, как в отладчик выйдешь - нажимаешь Замерить время и запускаешь обработку дальше. Как она отработает - переключаешься в отладчик и останавливаешь замер времени. Результат внимательно смотришь.
 З.Ы. Еще удобно пользоваться не ТЗ, а ИндесированнаяТаблица из 1С++ - она иногда супер-круто всяческие задачи закрывала, которые в обычной ТЗ через одно место приходилось решать. Например, отфильтровать по нужному полю. | |||
| 10
    
        ildus78 07.07.18✎ 15:21 | 
        (0) ставь Novell Netware на сервер и будет тебе счастье     | |||
| 11
    
        Злопчинский 07.07.18✎ 16:20 | 
        Как известно
 "В Европе три столицы - Москва. Париж и Луховицы", а "лучше Бреста - нету места!" поэтому помочь земляку, автоматизирующему что-то там в Бресте (и не дай бог еще на ж/д) - святое дело! навались, ребята! (знаю что уже в Бресте есть как минимум 2 одноэсника, пора вам вступить в картельный сговор и монополизировать рынок и цены ;-) . Автор, стучись в скайп Zlopun или на e.meil@mail.ru - помогу (через тимвьювер), по крайней мере, в отладчике скорость померять (ну и в код глянем м.б.) | |||
| 12
    
        Eugene_a 07.07.18✎ 23:43 | 
        Спасибо за помощь, наваливаться не нужно, достаточно хорошего целеуказания. )
 Интересно, а где видно, что я из Бреста? Профиль вроде пока пуст. | |||
| 13
    
        Eugene_a 07.07.18✎ 23:47 | 
        (10) новелл вряд ли возможен, так как сервер где-то виртуально крутится с вин2003 и MSSQL, а сеть контролируется контроллером домена и сисадминами. )     | |||
| 14
    
        Злопчинский 08.07.18✎ 04:07 | 
        (12) вы все брестские 1Сники, а ты в особенности, давно у меня под колпаком, я за вами слежу...     | |||
| 15
    
        Aleksey 08.07.18✎ 06:03 | 
        (12) ИМХО, по IP вычислил     | |||
| 16
    
        youalex 08.07.18✎ 06:11 | 
        (12) Все просто. Место проживания указано в регистрационной карточке ФСБ.     | |||
| 17
    
        Sserj 08.07.18✎ 06:26 | 
        (12) Все гораздо проще чем кажется, скриншоты лучше красить надо :)
 Я в таких случаях использую 1sqlite. Создаю нужные таблицы в памяти, заполняю их нужными данными запросами из базы. И дальше уже вся работа с памятью запросами к этим таблицам. Скорость формирования в некоторых случаях вырастает на несколько порядков. Это удобнее чем индексированная таблица, так как к своим таблицам можно строить любые запросы и так же создавать любые индексы. | |||
| 18
    
        Обработка 08.07.18✎ 11:24 | 
        (17) "На" или "В" несколько порядков?     | |||
| 19
    
        Sserj 08.07.18✎ 12:21 | 
        (18) Ну порядков все таки "на" перерасчет на "В" это получается "в 10" или в "в 100" изредка получается таки и "в 1000" раз.     | |||
| 20
    
        Eugene_a 11.07.18✎ 13:49 | 
        написал отчет.
 данные из двух справочников заполняю в две ТЗ и потом их тупо в циклах обрабатываю. Вроде нигде в циклах к справочникам не обращаюсь, то есть только к ТЗ, но при входе в 1С второго пользователя (с другого компа) начинает работать раз в 100 медленнее. Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме. В чем может быть причина такой разницы в скорости работы? https://drive.google.com/file/d/1zYVcubvGZAZy2LXbFnRHOBMAKYVWYAIs/view?usp=sharing в печатной форме данные только из ТЗ берутся. | |||
| 21
    
        Builder 11.07.18✎ 13:53 | 
        (20) Ответ ты сам сказал - "база DBF на сетевом диске. "     | |||
| 22
    
        Builder 11.07.18✎ 13:58 | 
        (20) "Вроде нигде в циклах к справочникам не обращаюсь"
 Ну да ну да..... ТЗ_сотрудники.Сотрудник.Оклад.Получить(дата_цикла) Везде обращение к периодическим реквизитам, а они в 7.7 хранятся в отдельном месте.... | |||
| 23
    
        Eugene_a 11.07.18✎ 14:03 | 
        (22)
 то есть периодические реквизиты не попадают в ТЗ как свойство объекта? | |||
| 24
    
        Builder 11.07.18✎ 14:11 | 
        (23) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы.
 Периодические реквизиты в 7.7 вообще одно из слабых и тормознутых мест. | |||
| 25
    
        arsik гуру 11.07.18✎ 14:47 | 
        Лучше запросом в ТЗ сразу выбрать все значения реквизитов которые понадобятся, а потом уже обращаться к ним, а не через объект.     | |||
| 26
    
        Eugene_a 11.07.18✎ 15:03 | 
        а, может, есть хранищище в памяти, которое может хранить сразу объект справочника целиком, как в ООП ?     | |||
| 27
    
        ptiz 11.07.18✎ 15:11 | 
        (0) Сделай замер производительности, всё будет видно     | |||
| 28
    
        Djelf 11.07.18✎ 15:24 | 
        (27) Ему об этом уже раз 5 писали...
 (26) Вот зачем этот код ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код Выполнять 3 раза? Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати. Причем это можно сделать еще на этапе заполнения ТЗ_сотрудники. | |||
| 29
    
        Pit0n_08 11.07.18✎ 17:01 | 
        (20)"... база DBF на сетевом диске/
 Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме. В чем может быть причина такой разницы в скорости работы?..." Отключается кеширование в ОС при немонопольном доступе к файлам - приходится пилить ж/диск. | |||
| 30
    
        Djelf 11.07.18✎ 17:25 | 
        Кеширование то можно вылечить.
 v7dbnet в помощь https://cloud.mail.ru/public/C3fY/CWQwnhy5L Это клиент/сервер для файлового варианта. А насчет "быстро" я сомневаюсь. Этот отчет вообще не должен работать быстро. Разве что вытягивать периодические в тз таким образом и крутить уже тз. Периодический.ИспользоватьОбъект("", Справочник.ТекущийЭлемент()); Периодический.ВыбратьЗначения(НачДата,КонДата); Периодический.ВыбратьЗначения(); Пока Периодический.ПолучитьЗначение()=1 Цикл | |||
| 31
    
        AliAksA 12.07.18✎ 08:32 | 
        (11) Брест - конечно, крепость-герой, но столица Полесья - ПИНСК)))     | |||
| 32
    
        AliAksA 12.07.18✎ 08:38 | 
        (20) верни ХР и жизнь наладится ...     | |||
| 33
    
        SleepyHead гуру 12.07.18✎ 08:42 | 
        Их - за 45 секунд так переживать? Да что с вами, люди.     | |||
| 34
    
        vova1122 12.07.18✎ 09:18 | 
        (33) А вдруг он этот отчет запускает каждые 10 минут...     | |||
| 35
    
        Злопчинский 12.07.18✎ 13:26 | 
        (30) Использование объекта "Периодический" при массовых операциях дает выигрыш ~25%     | |||
| 36
    
        Злопчинский 12.07.18✎ 13:27 | 
        (31) знаменитиые пинские мотобольщики?!     | |||
| 37
    
        Eugene_a 12.07.18✎ 20:17 | 
        (24) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы. 
 то есть если засунуть элементы справочника в ТЗ, а потом в справочнике их изменить, то в ТЗ (то есть по ссылке на справочник) мы увидим изменения? не перезаливая справочник в ТЗ. | |||
| 38
    
        Eugene_a 12.07.18✎ 20:21 | 
        (28) Вот зачем этот код 
 ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код Выполнять 3 раза? наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета. | |||
| 39
    
        Eugene_a 12.07.18✎ 20:43 | 
        вот если бы можно было узнать даты изменения периодического реквизита без перебора дат в периоде.....     | |||
| 40
    
        Eugene_a 12.07.18✎ 21:05 | 
        (39) Использование объекта "Периодический" позволяет это сделать.     | |||
| 41
    
        vova1122 13.07.18✎ 11:17 | 
        (3) совершенно верно. но не так как вы представляете. В Тз есть ссылка на объект. (на форме отображается только только текст, хотя по сути это ссылка на справочник). Когда вы заполните свою Тз а потом измените Наименование в справочнике, то на форме естественно ничего не поменяется. Но если вызвать например  Сообщить(ТЗ_подразделения.Подразделение.Наименование) то получите уже измененное наименование     | |||
| 42
    
        vova1122 13.07.18✎ 11:31 | 
        (41) => (37)     | |||
| 43
    
        Djelf 13.07.18✎ 11:37 | 
        (38) > наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета.
 Т.е. успевают мигрировать пока выполняется обработка? оО | |||
| 44
    
        Eugene_a 13.07.18✎ 12:08 | 
        (43) нет, но нужно в отчете отражать каждое их перемещение, а также изменения оклада, режима работы и должности.
 Которые происходят хаотично в течение месяца, за который формируется Штатное. И при каждом изменении, например, 12 числа, нужно за 12е число вывести соответствующий отчет с изменениями у всех сотрудников за это число. (а увольнение - за предыдущее рабочее число). То есть листов в отчете может быть от 1 до 31. | |||
| 45
    
        hhhh 13.07.18✎ 12:25 | 
        (44) ну тогда и неудивителдьно, что тормозит. Чего вы хотели?     | |||
| 46
    
        Eugene_a 13.07.18✎ 12:37 | 
        (45) я хотел считать справочник в ТЗ целиком, как объекты в ООП и работать с данными в памяти.
 но 1С, как выяснилось, только ссылки на справочник запихивает в ТЗ. Сейчас сделаю ЭТО через объект "Периодический" и будет счастье. | |||
| 47
    
        Djelf 13.07.18✎ 12:42 | 
        (44) Да по коду все понятно. Я о другом.
 Ты 3 раза запрашиваешь одно и то же значение. В этом нет смысла, только потеря производительности. Ты вообще (28) читал? > Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный > В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати. И вообще, даже простая замена Подразделение.Код на КодПодразделения=Подразделение.Код и сравнение периодического кода с КодПодразделения уже значительно уменьшит количество запросов к базе. И почитай про оптимизацию http://catalog.mista.ru/public/18924/ | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |