|
Быстро ли работает "Выполнить()"? | ☑ | ||
---|---|---|---|---|
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
|
Не поленился потратить время и сравнить. Субъективно разницы нет. Собственно, в данной задаче этого достаточно.
Правда, остается вопрос, при росте количества пользователей (работа в терминальных сессиях) не изменится ли ситуация. Надеюсь, не критично. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |