Имя: Пароль:
1C
1С v8
Быстро ли работает "Выполнить()"?
0 DrLekter
 
24.11.16
15:39
Есть задача, в соответствии с которой приходится периодически пополнять общий модуль некими процедурами.
Есть мысль хранить процедуры в справочнике и вызывать через Выполнить() - это позволить не ковырять конфигурацию каждый раз.
Есть нюанс - процедуры должны выполняться быстро, это критично.
Есть вопрос: отличается ли быстродействие выполнения кода из конфигурации и из текстового файла и насколько?
Процедуры небольшие по длине, содержат в основном преобразование строк и математические операции. Назначение - разбор протоколов подключенного оборудования, зоопарк которого непрерывно пополняется.
1 Господин ПЖ
 
24.11.16
15:40
>Есть нюанс - процедуры должны выполняться быстро, это критично

причем тут тогда 1с
2 Лефмихалыч
 
24.11.16
15:42
это будет при любом раскладе медленнее, чем встроенный модуль.
Хотя бы потому, что Выполнить() будет компилировать в момент вызова каждый раз. А ведь еще надо из базы получить то, что потом Выполнить()
3 Лефмихалыч
 
24.11.16
15:42
ну и вот это
>это позволить не ковырять конфигурацию каждый раз
гнилой базар совсем
4 h-sp
 
24.11.16
15:45
(3) обмен данными через кд 2 быстро выполняется.
5 Лефмихалыч
 
24.11.16
15:47
(4) и чо?
6 DrLekter
 
24.11.16
15:50
"Быстро" - не значит, что нужно считать такты. Когда визуально изменение цифирок в форме не отличается от табло устройства (т.е. пользователь, переведя взгляд, не улавливает отставания) - это достаточно быстро, это позволяет комфортно работать. Сейчас - достаточно быстро.
То, что подгружать откуда-то код медленнее - это понятно, вопрос в том, насколько. 1С и так не ассемблер в этом плане. Сейчас вот подумал, а может, извернуться так, чтобы код подгружался один раз, при вызове формы, а потом использовался, надо подумать еще.
(3) почему гнилой? Чем аморально желание не тиранить лишний раз обновлениями базу и юзеров? :)
(4) вот тоже не понял, при чем здесь кд.
7 DrLekter
 
24.11.16
15:54
Из базы, кстати, ничего не грузится - компонента отдает данные из сети сразу в форму, по событию получения данных вызывается процедура разбора.
8 marty0701
 
24.11.16
15:56
пару раз уже можно было бы проверить и доложить форуму
9 DrLekter
 
24.11.16
15:58
Проверить получится с одним пользователем, а когда их пара десятков работает одновременно, результат вполне может отличаться. Лучше семь раз отмерить, чем тестировать на продакшне. Может, затея и вовсе глупая, и время тратить не стоит.
10 h-sp
 
24.11.16
15:58
(6) там ведь через выполнить идет. выполнение правил.
11 DrLekter
 
24.11.16
16:00
(10) а через Выполнить правила вызываются один раз или для каждой записи?
12 Господин ПЖ
 
24.11.16
16:04
смотря как кэширование настроено. если "запоминать" - второй раз объект этим правилом уже не обрабатывается. просто суется ссылка на то что уже один раз обработано

а если стоит "не запоминать" - лупит каждый раз
13 h-sp
 
24.11.16
16:27
(11) конечно для каждой. Для каждого обработчика каждого документа.
14 Сниф
 
24.11.16
16:35
(2) Это если тупо "Выполнить()" без учета контекста.
А можно, наверное, так:

Перем МоеПространствоИмен;

Функция ВыполнитьТекстовыйМодуль(стрТекст)
    Выполнить(стрТекст);
КонецФункции;

ВыполнитьТекстовыйМодуль("Если МоеПространствоИмен=Неопределено Тогда МоеПространствоИмен=ИнициализацияНастроек");//

При первом запуске считываются настройки и кешуруются в МоеПространствоИмен, а второй запуск происходить быстрее..
15 Сниф
 
24.11.16
16:37
(6)<чтобы код подгружался один раз, при вызове формы, а потом использовался>

Именно так не знаю. Но можно (см.выше) хранить в переменной всякие данные, МоеПространствоИмен.МояЛюбимаяТаблицаЗначений
16 DmitrO
 
24.11.16
16:39
буквально вчера промерял такую штуку:
Объект = Менеджер.СоздатьЭлемент();
и
Объект = Вычислить("Менеджер.СоздатьЭлемент()");

Так вот оказалось, что Вычислить работает в 1.5 раза быстрее. Был напуган. Перепроверил.. нет все именно так. Проверил на мобильной платформе, тоже Вычислить быстрее в 1.5 раза - тоже самое.

Решил, вероятно дело в том, что замер был конфигуратором, соответственно в режиме отладки. Успокоился и стал использовать Вычислить.
17 h-sp
 
24.11.16
16:40
(14) наверно это в платформе сделано. Запоминается в кеше и второй раз не компилируется один и тот же текст. Может ваша функция излишня.
18 DmitrO
 
24.11.16
16:41
(16)+ 8.3.8.2137, а мобильная 8.3.9.74
19 DrLekter
 
25.11.16
11:32
Не поленился потратить время и сравнить. Субъективно разницы нет. Собственно, в данной задаче этого достаточно.
Правда, остается вопрос, при росте количества пользователей (работа в терминальных сессиях) не изменится ли ситуация. Надеюсь, не критично.
2 + 2 = 3.9999999999999999999999999999999...