Имя: Пароль:
1C
 
Влияние интерфейса пользователя на производительность?
0 H A D G E H O G s
 
18.01.22
11:50
Дня доброго.
Прошу меня проверить и скачать эту почти пустую конфу:
https://disk.yandex.ru/d/XNHXmKveZx32kA

развернуть ее в клиент-серверном варианте, в котором установлен COM-Connector и нажать последовательно кнопки
- Вызов напрямую
- Вызов через соединение

и прислать сюда то, что напишет в окне сообщений 1С.

По моим данным - производительность через COM-Connector в 3-4 раза выше.
1 pechkin
 
18.01.22
12:08
а подробней?
2 lodger
 
18.01.22
12:16
Вызов напрямую это как и куда?
3 Dmitrii
 
гуру
18.01.22
12:19
Файловый вариант (на локальном компе).

- Вызов напрямую.
Коротких вызовов : 231, размер пакета 36, всего данных 8 316
Длинных вызовов : 19, размер пакета 36 000, всего данных 684 000

- Вызов через соединение.
Коротких вызовов : 66 666, размер пакета 36, всего данных 2 399 976
Длинных вызовов : 2 479, размер пакета 36 000, всего данных 89 244 000

Клиент-сервер.

- Вызов напрямую.
Коротких вызовов : 284, размер пакета 36, всего данных 10 224
Длинных вызовов : 25, размер пакета 36 000, всего данных 900 000

- Вызов через соединение.
Коротких вызовов : 211, размер пакета 36, всего данных 7 596
Длинных вызовов : 71, размер пакета 36 000, всего данных 2 556 000
4 pechkin
 
18.01.22
12:20
майнишь на 1ске?
5 H A D G E H O G s
 
18.01.22
12:29
Нет, просто наткнулся на странную вещь.

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

Подозреваю, что это обработка клавиш пользователя, CTRL+Break, но почему она такая монструозная?
6 lodger
 
18.01.22
12:34
так это может разница модулей клиента и ВнешнегоСоединения?
7 Kassern
 
18.01.22
12:51
(0) Клиент-сервер.
На прямую:
Длинных вызовов : 37, размер пакета 36 000, всего данных 1 332 000
Коротких вызовов : 447, размер пакета 36, всего данных 16 092
Через соединение:
Длинных вызовов : 140, размер пакета 36 000, всего данных 5 040 000
Коротких вызовов : 851, размер пакета 36, всего данных 30 636
8 Kassern
 
18.01.22
12:52
(0) "COM-Connector в 3-4 раза выше" не заметил, по данной обработке, наоборот показалось выполнение дольше
9 H A D G E H O G s
 
18.01.22
13:11
(8) ну судя по (7) - выше у Com в 2-3 раза
10 Kassern
 
18.01.22
13:13
(9) а вы учитываете время на сам коннект?
11 Kassern
 
18.01.22
13:18
(9) реально 12сек против 9с секунд ком соединения. В моем случае 3-4раза не чувствуется)
12 H A D G E H O G s
 
18.01.22
13:19
(10) нет конечно.
13 Мультук
 
гуру
18.01.22
13:45
(11) В его тесте время - фиксировано
14 Fragster
 
гуру
18.01.22
14:05
(2) ПриНачалеРаботыСистемы происходит когда окна на экране нет
15 Fragster
 
гуру
18.01.22
14:05
(14)->(5)
16 arsik
 
гуру
18.01.22
15:07
(0) Ну так в клиентском контекст постоянно переключается. После переключения форма обновляется. В коме визуальной формы нет, ничего и не обновляется.
17 pechkin
 
18.01.22
15:08
обработка в цикле уходит на сервер чтоли?
18 H A D G E H O G s
 
18.01.22
15:09
(16) в ПриНачалеРаботыСистемы форм нет.
19 H A D G E H O G s
 
18.01.22
15:09
(17) да
20 pechkin
 
18.01.22
15:10
(19) чтож тогда удивляться что она тормозит?
21 Garykom
 
гуру
18.01.22
15:11
(0) Разные версии платформы попробуй еще
И да что клиент синхронизируется с сервером это ежу понятно
Сам подумай как Сообщить() с сервера работает ))
22 Garykom
 
гуру
18.01.22
15:12
(21)+ Выход через фоновые логично?
23 Kassern
 
18.01.22
15:12
только не совсем понятно, где такой подход использовать, я вообще стараюсь по максимуму ком соединения исключать. Зависшие подключения потом только перезапуском службы решаются. Да и соединение не мгновенно отрабатывает.
24 Fragster
 
гуру
18.01.22
15:13
(21) сообщить с сервера работает точно так же, как с клиента визуально. попробуй сообщить в цикле на клиенте, всё появится в конце цикла
25 Garykom
 
гуру
18.01.22
15:14
(24) Хаха. Речь не про это а что происходит синхронизация клиента с сервером по таймауту и это замедляет серверный код
Может там клиент уже давно отвалился и пора серверный код прибить например
26 pechkin
 
18.01.22
15:16
(25) серверный код не прибивается по отвалу клиента
27 pechkin
 
18.01.22
15:16
иначе бы зависших сеансов не было бы
28 Garykom
 
гуру
18.01.22
15:18
(26) (27) в курсе
29 Garykom
 
гуру
18.01.22
15:22
(0) пробовал с &НаСервереБезКонтекста ?
разницы никакой или есть?
30 H A D G E H O G s
 
18.01.22
15:23
(29) пробовал. Нет разницы.
31 Garykom
 
гуру
18.01.22
15:23
(30) тогда осталось через фоновое еще проверить
32 H A D G E H O G s
 
18.01.22
15:23
(20) попытайся посмотреть код.
33 Garykom
 
гуру
18.01.22
15:25
интересно если сервер 1С с отладкой или без нее влиять будет
34 pechkin
 
18.01.22
15:29
(32) это нужно качать, базу разворачивать.
делать я конечно же этого не буду
35 arsik
 
гуру
18.01.22
15:41
Через асинхронный метод быстрее получается

&НаКлиенте
Процедура ЗадатьВопрос(Команда)
    Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос",ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "1", РежимДиалогаВопрос.ОК,1,КодВозвратаДиалога.ОК);
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопрос(Результат, Параметры) Экспорт
    РезультатАнализа=ТестированиеВнешнееСоединение.ВыполнитьАнализ();
    РезультатКороткихВызовов=РезультатАнализа.РезультатКороткихВызовов;
    РезультатДлинныхВызовов=РезультатАнализа.РезультатДлинныхВызовов;
    Сообщить(СтрШаблон("Коротких вызовов : %1, размер пакета %2, всего данных %3",РезультатКороткихВызовов.Вызовов,РезультатКороткихВызовов.РазмерПакета,РезультатКороткихВызовов.Вызовов*РезультатКороткихВызовов.РазмерПакета));
    Сообщить(СтрШаблон("Длинных вызовов : %1, размер пакета %2, всего данных %3",РезультатДлинныхВызовов.Вызовов,РезультатДлинныхВызовов.РазмерПакета,РезультатДлинныхВызовов.Вызовов*РезультатДлинныхВызовов.РазмерПакета));
КонецПроцедуры
36 arsik
 
гуру
18.01.22
15:46
+(35) Но это за счет того что форма не обновляется в момент выполнения "ТестированиеВнешнееСоединение.ВыполнитьАнализ()".
37 Garykom
 
гуру
18.01.22
15:52
(35) а че по старому то? хде новый "асинх"?
38 arsik
 
гуру
18.01.22
16:07
(37) А хрен знает как им пользоваться :)
39 Kassern
 
18.01.22
16:13
(38) Ставишь Асинх перед процедурой, или функцией, делов то)
40 arsik
 
гуру
18.01.22
16:32
(39) А нук. Покажи.
41 ДенисЧ
 
18.01.22
16:41
(40)

Асинх Процедура ЗадатьВопросОПродолжении()
    Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Ждать ВопросАсинх(НСтр("ru = 'Продолжить выполнение операции?';"
         + " en = 'Do you want to continue?'"), Режим, 0);
    Если Ответ = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;
КонецПроцедуры
42 arsik
 
гуру
18.01.22
16:48
(41) Не Асинхронно не айс. Тоже сплешит как и клиентский

Через вопрос (35)
Коротких вызовов : 1 447, размер пакета 36, всего данных 52 092
Длинных вызовов : 38, размер пакета 36 000, всего данных 1 368 000


Через новый асинхронный
Коротких вызовов : 1 030, размер пакета 36, всего данных 37 080
Длинных вызовов : 38, размер пакета 36 000, всего данных 1 368 000


Вызов напрямую
Коротких вызовов : 1 025, размер пакета 36, всего данных 36 900
Длинных вызовов : 37, размер пакета 36 000, всего данных 1 332 000
43 Fragster
 
гуру
18.01.22
16:52
(5) код не смотрел. под "обработка клавиш пользователя, CTRL+Break" имеешь ввиду то, что у тебя вставлена обработкаПрерыванияПользователя? ибо с ней, например, "сообщить" в цикле работает как ожидается, а значит идет обновление форм, может проверка всяких оповещений типа изменения данных (хотя бы их наличия) и прочее
44 H A D G E H O G s
 
18.01.22
19:07
(43) Нет, не вставлена.