Как ускорить проверку условия?

1. support 4478 17.04.07 13:17 Сейчас в теме
Слышал, что условия в 1С 7.7 обрабатываются долго.
Кто-нибудь сравнивал какие условия работают быстрее, какие медленнее.
Например:
насколько медленней
Если НЕ(ПустоеЗначение(А)=1) Тогда
по сравнению с
Если ПустоеЗначение(А)=0 Тогда
Знаю, что условия через "И" проверяются не последовательно, а все сразу, т.е.
если первое условие не удовлетворяет, 1с все равное проверят все условия.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vasilykushnir 63 17.04.07 17:10 Сейчас в теме
support Написал:
-------------------------------------------------------
> Слышал, что условия в 1С 7.7 обрабатываются
> долго.
> Кто-нибудь сравнивал какие условия работают
> быстрее, какие медленнее.
> Например:
> насколько медленней
> Если НЕ(ПустоеЗначение(А)=1) Тогда
> по сравнению с
> Если ПустоеЗначение(А)=0 Тогда

По логике (человеческой, а не 1С...) второе быстрее - одна проверка - только на пустое значение, в первом добавляется НЕ.

> Знаю, что условия через "И" проверяются не
> последовательно, а все сразу, т.е.
> если первое условие не удовлетворяет, 1с все
> равное проверят все условия.
>

А вот это точно! Сам как-то на эти грабли наступил - особенно проверки на значение реквизита какого-нибудь (а если его нет?) Вот и пришлось через попытку выкручиватся...


3. CheBurator 2725 18.04.07 00:12 Сейчас в теме
.... можно ускорить еще примерно на 10 процентов без особых затрат очень просто: юзать вместо конструкции
Если ККК>=КК Тогда
следующую:
Если (ККК-КК)>=0 Тогда
4. poppy 18.04.07 03:03 Сейчас в теме
> Знаю, что условия через "И" проверяются не
> последовательно, а все сразу, т.е.
> если первое условие не удовлетворяет, 1с все
> равное проверят все условия.

В дельфи есть параметр компиляции программы "Complete boolean eval".
Этот параметр управляет возможностями компилятора. Но ведь мы в зоопарке (т.е. работаем с интерпретатором)... Делаем выводы сами. ;)

> А вот это точно! Сам как-то на эти грабли наступил - особенно
> проверки на значение реквизита какого-нибудь (а если его нет?) Вот
> и пришлось через попытку выкручиватся...

К чему такие понты? Было обсуждение конструкции Попытка. Ни к чему все это (т.е. использование Попытки). ИМХО красивее написать вложенное условие.

> Кто-нибудь сравнивал какие условия работают быстрее, какие медленнее.

Нравятся мне мужики на этом форуме. Самим слабо проверить?

В рассматриваемых конструкциях основное время занимает расчет функции ПустоеЗначение(). Причем, ПустоеЗначение(число) работает на 31 процент медленнее, чем ПустоеЗначение(строка) или ПустоеЗначение(справочник).

ПустоеЗначение(ПустоеЗначение) работает на 20% быстрее, чем ПустоеЗначение(неПустоеЗначение)

Если сравнивать НЕ(ПустоеЗначение(А)=1) и ПустоеЗначение(А)=0, то разница незаметная в пользу второго выражения.
5. poppy 18.04.07 03:08 Сейчас в теме
Сhe Burashka Написал:
-------------------------------------------------------
> .... можно ускорить еще примерно на 10 процентов
> без особых затрат очень просто: юзать вместо
> конструкции
> Если ККК>=КК Тогда
> следующую:
> Если (ККК-КК)>=0 Тогда

Такая замена привела к 30% замедлению :(
6. CheBurator 2725 18.04.07 03:19 Сейчас в теме
Странно...
Сейчас проверю еще раз...
7. CheBurator 2725 18.04.07 04:57 Сейчас в теме
Да, подтверждаю - именно так, поряда 30-35%..
надо же, как я облажался...
так меня - мордой в газировку! ;-)
8. artbear 1568 18.04.07 13:37 Сейчас в теме
В принципе, ИМХО с помощью ВК 1С++ можно ускорить подобную проверку,
Если считать пустые значения любых типов одинаковыми, и считать нулевые числа и строки не пустыми значениями :)
Т.е можно добавить спец. метод в 1С++, который бы при таких условиях работал бы очень быстро!
9. poppy 18.04.07 23:52 Сейчас в теме
Сhe Burashka Написал:
-------------------------------------------------------
> Да, подтверждаю - именно так, поряда 30-35%..
> надо же, как я облажался...
> так меня - мордой в газировку! ;-)

Не расстраивайся, Че. Всякое бывает.

А то, что платформа дает нам непредсказуемые разультаты - это вполне предсказуемо. ;)
10. O-Planet 6403 19.04.07 02:22 Сейчас в теме
Все предсказуемо! И результаты и выводы, которые можно сделать, глядя на платформу. Какие есть варианты ускорения условий?
1. Использовать их меньше
2. Написать ddl-ку, которая бы работала с простыми условиями
Поясню. В условиях в 1С может стоять все, то угодно: и число, и строка, и ссылка. Тормоза возникают именно на этапе идентификации, а не сравнения. По нормальному, не хватает какой-нибудь директивы в языке, или доп. функции, позволяющей сравнивать величины одинаковых типов, чтобы обойти необходимость распознавания. Но это уже можно попросить Абадонну, такую штуку написать и оформить в dll.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот