Имя: Пароль:
1C
1С v8
Оптимизация получения GUID по COM-соединению
0 fjay69
 
05.10.17
09:46
Доброго дня!
Есть обработка, которая сверяет данные между двумя базами. Обработка запускается на Базе 1 (Б1), подключается к Базе 2 (Б2) по COM-соединению. Поставлена задача ускорить выполнение сверки. Замер времени показывает, что дольше всех выполняются операции подобного рода:

ГУИД = COMПодключение.XMLСтрока(COMОбъект.УникальныйИдентификатор());

Суть в том, что в Б2 запускается запрос (COMПодключение.NewObject("Запрос")), затем объекты Б2 нужно сопоставить с объектами Б1 по GUID. Есть ли способ выполнить это быстрее?
1 RomaH
 
naïve
05.10.17
09:48
ГУИД = COMПодключение.XMLСтрока(COMОбъект.УникальныйИдентификатор());

тут две операции - которая из них дольше?
2 mehfk
 
05.10.17
09:50
Вместо того, чтобы каждый раз получать гуид объекта в той базе, сохраняй в регистр сведений в той базе соответствующие гуиды объектов этой базы.
3 DrShad
 
05.10.17
09:51
(2) +1
4 fjay69
 
05.10.17
09:54
Эта:

COMОбъект.УникальныйИдентификатор()
5 d4rkmesa
 
05.10.17
14:14
(0) COMПодключение.XMLСтрока(COMОбъект) - если объект ссылочного типа.
6 Ненавижу 1С
 
гуру
05.10.17
14:31
(0) мне кажется больше всего времени ест запрос, а не эта фигня
7 Ненавижу 1С
 
гуру
05.10.17
14:33
(0) а почему:
ГУИД = COMПодключение.XMLСтрока(COMОбъект.УникальныйИдентификатор());

а не:
ГУИД = COMПодключение.String(COMОбъект.УникальныйИдентификатор());
8 RomaH
 
naïve
05.10.17
14:39
(7) а почему не
ГУИД = "" + COMОбъект.УникальныйИдентификатор();
9 ProxyInspector
 
05.10.17
14:40
(7) COMПодключение.String(COMОбъект.УникальныйИдентификатор()) это самый быстрый способ. По моему опыту.
10 Ненавижу 1С
 
гуру
05.10.17
14:42
(8) потому что не взлетит, будет ГУИД = "COMObject"
11 fjay69
 
05.10.17
15:15
Как мне подсказал коллега, такой способ работает быстрее:

ГУИД = COMПодключение.XMLСтрока(COMОбъект);

То есть я могу получить ГУИД не вызывая функцию УникальныйИдентификатор(). И это реально быстро!
12 fjay69
 
05.10.17
15:23
(7) Пробовал. Разницы скорости не заметил.
13 4St
 
05.10.17
15:24
(11) Еще можно закинуть COM объекты в Массив, сериализовать его, а из него уже надергать гуиды.
14 pavig
 
05.10.17
15:31
(0) Подготавливай весь набор на стороне СОМ, забирай оттуда в сериализованном виде, обрабатывай "внутри" своей базы. Делов-то)
15 Фортовый
 
05.10.17
15:34
читал подобное в мануале ускорения обмена .там чел писал .что выгружал соответсвие в регистр сведений .как то через кеш делал в нем . погугли найдешь статью
16 Mikhail Volkov
 
05.10.17
18:51
(2) ГУИДы той и этой базы одни и те же!?
(0) Много передавать? Дольше всех устанавливается СОМ-соединение...
Основная теорема систематики: Новые системы плодят новые проблемы.