Слышал, что условия в 1С 7.7 обрабатываются долго.
Кто-нибудь сравнивал какие условия работают быстрее, какие медленнее.
Например:
насколько медленней
Если НЕ(ПустоеЗначение(А)=1) Тогда
по сравнению с
Если ПустоеЗначение(А)=0 Тогда
Знаю, что условия через "И" проверяются не последовательно, а все сразу, т.е.
если первое условие не удовлетворяет, 1с все равное проверят все условия.
Кто-нибудь сравнивал какие условия работают быстрее, какие медленнее.
Например:
насколько медленней
Если НЕ(ПустоеЗначение(А)=1) Тогда
по сравнению с
Если ПустоеЗначение(А)=0 Тогда
Знаю, что условия через "И" проверяются не последовательно, а все сразу, т.е.
если первое условие не удовлетворяет, 1с все равное проверят все условия.
По теме из базы знаний
- Автоматизированная проверка конфигураций… и пара слов о стандартах разработки
- Как контролировать качество внешних обработок, отчетов, правил обмена, расширений 1С и поставить это на поток
- Как из 1С отдать миллионы строк в BI и успеть это сделать быстро
- Как использование Gitlab-CI + OneScript может избавить вас от рутины
- Как ускорить закрытие в 1С: оптимизация процессов и процедур
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
support Написал:
-------------------------------------------------------
> Слышал, что условия в 1С 7.7 обрабатываются
> долго.
> Кто-нибудь сравнивал какие условия работают
> быстрее, какие медленнее.
> Например:
> насколько медленней
> Если НЕ(ПустоеЗначение(А)=1) Тогда
> по сравнению с
> Если ПустоеЗначение(А)=0 Тогда
По логике (человеческой, а не 1С...) второе быстрее - одна проверка - только на пустое значение, в первом добавляется НЕ.
> Знаю, что условия через "И" проверяются не
> последовательно, а все сразу, т.е.
> если первое условие не удовлетворяет, 1с все
> равное проверят все условия.
>
А вот это точно! Сам как-то на эти грабли наступил - особенно проверки на значение реквизита какого-нибудь (а если его нет?) Вот и пришлось через попытку выкручиватся...
-------------------------------------------------------
> Слышал, что условия в 1С 7.7 обрабатываются
> долго.
> Кто-нибудь сравнивал какие условия работают
> быстрее, какие медленнее.
> Например:
> насколько медленней
> Если НЕ(ПустоеЗначение(А)=1) Тогда
> по сравнению с
> Если ПустоеЗначение(А)=0 Тогда
По логике (человеческой, а не 1С...) второе быстрее - одна проверка - только на пустое значение, в первом добавляется НЕ.
> Знаю, что условия через "И" проверяются не
> последовательно, а все сразу, т.е.
> если первое условие не удовлетворяет, 1с все
> равное проверят все условия.
>
А вот это точно! Сам как-то на эти грабли наступил - особенно проверки на значение реквизита какого-нибудь (а если его нет?) Вот и пришлось через попытку выкручиватся...
> Знаю, что условия через "И" проверяются не
> последовательно, а все сразу, т.е.
> если первое условие не удовлетворяет, 1с все
> равное проверят все условия.
В дельфи есть параметр компиляции программы "Complete boolean eval".
Этот параметр управляет возможностями компилятора. Но ведь мы в зоопарке (т.е. работаем с интерпретатором)... Делаем выводы сами. ;)
> А вот это точно! Сам как-то на эти грабли наступил - особенно
> проверки на значение реквизита какого-нибудь (а если его нет?) Вот
> и пришлось через попытку выкручиватся...
К чему такие понты? Было обсуждение конструкции Попытка. Ни к чему все это (т.е. использование Попытки). ИМХО красивее написать вложенное условие.
> Кто-нибудь сравнивал какие условия работают быстрее, какие медленнее.
Нравятся мне мужики на этом форуме. Самим слабо проверить?
В рассматриваемых конструкциях основное время занимает расчет функции ПустоеЗначение(). Причем, ПустоеЗначение(число) работает на 31 процент медленнее, чем ПустоеЗначение(строка) или ПустоеЗначение(справочник).
ПустоеЗначение(ПустоеЗначение) работает на 20% быстрее, чем ПустоеЗначение(неПустоеЗначение)
Если сравнивать НЕ(ПустоеЗначение(А)=1) и ПустоеЗначение(А)=0, то разница незаметная в пользу второго выражения.
> последовательно, а все сразу, т.е.
> если первое условие не удовлетворяет, 1с все
> равное проверят все условия.
В дельфи есть параметр компиляции программы "Complete boolean eval".
Этот параметр управляет возможностями компилятора. Но ведь мы в зоопарке (т.е. работаем с интерпретатором)... Делаем выводы сами. ;)
> А вот это точно! Сам как-то на эти грабли наступил - особенно
> проверки на значение реквизита какого-нибудь (а если его нет?) Вот
> и пришлось через попытку выкручиватся...
К чему такие понты? Было обсуждение конструкции Попытка. Ни к чему все это (т.е. использование Попытки). ИМХО красивее написать вложенное условие.
> Кто-нибудь сравнивал какие условия работают быстрее, какие медленнее.
Нравятся мне мужики на этом форуме. Самим слабо проверить?
В рассматриваемых конструкциях основное время занимает расчет функции ПустоеЗначение(). Причем, ПустоеЗначение(число) работает на 31 процент медленнее, чем ПустоеЗначение(строка) или ПустоеЗначение(справочник).
ПустоеЗначение(ПустоеЗначение) работает на 20% быстрее, чем ПустоеЗначение(неПустоеЗначение)
Если сравнивать НЕ(ПустоеЗначение(А)=1) и ПустоеЗначение(А)=0, то разница незаметная в пользу второго выражения.
Сhe Burashka Написал:
-------------------------------------------------------
> .... можно ускорить еще примерно на 10 процентов
> без особых затрат очень просто: юзать вместо
> конструкции
> Если ККК>=КК Тогда
> следующую:
> Если (ККК-КК)>=0 Тогда
Такая замена привела к 30% замедлению :(
-------------------------------------------------------
> .... можно ускорить еще примерно на 10 процентов
> без особых затрат очень просто: юзать вместо
> конструкции
> Если ККК>=КК Тогда
> следующую:
> Если (ККК-КК)>=0 Тогда
Такая замена привела к 30% замедлению :(
В принципе, ИМХО с помощью ВК 1С++ можно ускорить подобную проверку,
Если считать пустые значения любых типов одинаковыми, и считать нулевые числа и строки не пустыми значениями :)
Т.е можно добавить спец. метод в 1С++, который бы при таких условиях работал бы очень быстро!
Если считать пустые значения любых типов одинаковыми, и считать нулевые числа и строки не пустыми значениями :)
Т.е можно добавить спец. метод в 1С++, который бы при таких условиях работал бы очень быстро!
Сhe Burashka Написал:
-------------------------------------------------------
> Да, подтверждаю - именно так, поряда 30-35%..
> надо же, как я облажался...
> так меня - мордой в газировку! ;-)
Не расстраивайся, Че. Всякое бывает.
А то, что платформа дает нам непредсказуемые разультаты - это вполне предсказуемо. ;)
-------------------------------------------------------
> Да, подтверждаю - именно так, поряда 30-35%..
> надо же, как я облажался...
> так меня - мордой в газировку! ;-)
Не расстраивайся, Че. Всякое бывает.
А то, что платформа дает нам непредсказуемые разультаты - это вполне предсказуемо. ;)
Все предсказуемо! И результаты и выводы, которые можно сделать, глядя на платформу. Какие есть варианты ускорения условий?
1. Использовать их меньше
2. Написать ddl-ку, которая бы работала с простыми условиями
Поясню. В условиях в 1С может стоять все, то угодно: и число, и строка, и ссылка. Тормоза возникают именно на этапе идентификации, а не сравнения. По нормальному, не хватает какой-нибудь директивы в языке, или доп. функции, позволяющей сравнивать величины одинаковых типов, чтобы обойти необходимость распознавания. Но это уже можно попросить Абадонну, такую штуку написать и оформить в dll.
1. Использовать их меньше
2. Написать ddl-ку, которая бы работала с простыми условиями
Поясню. В условиях в 1С может стоять все, то угодно: и число, и строка, и ссылка. Тормоза возникают именно на этапе идентификации, а не сравнения. По нормальному, не хватает какой-нибудь директивы в языке, или доп. функции, позволяющей сравнивать величины одинаковых типов, чтобы обойти необходимость распознавания. Но это уже можно попросить Абадонну, такую штуку написать и оформить в dll.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот