Имя: Пароль:
1C
1С v8
Ускорение получения COM объекта
0 Stepa86
 
14.06.16
09:42
Есть 2 базы. Клиент-сервер, на одном скуле и на одном сервере 1С. 8.3.8.1652. Из первой, почти пустой, подключаюсь через COM ко второй - УПП.

Затраты на подключение - 10 секунд. Есть какие-либо фокусы по ускорению?

Счетчик = Счетчик + 1;
    
    началоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
    
    соединение = Новый COMObject("V83.COMConnector");
    база = соединение.Connect("Srvr=""Server"";Ref=""upp"";Usr = ""Обмен""; Pwd = ""marina""");
    
    затрачено = ТекущаяУниверсальнаяДатаВМиллисекундах() - началоЗамера;
    
    Сообщить( "" + Счетчик + "." + ТекущаяДатаСеанса() + ": " + затрачено + "мс" );

Модуль с повторным использованием юзаю. Так же в фоновом задании пробую получить соединение и пробрасываю его в сеанс через временное хранилище, но там в 90% случаев приходит Неопределено. В УПП весь код по инициализации не выполняется.
1 vde69
 
14.06.16
09:45
COM 1с сделан специально медленным для защиты от всяких программ подбора паролей...

ну и второе - лицензии получаются долго...

я специально проверял (правда давно на 8.0), быстрее 4 секунд авторизацию через COM не пройти
2 Serginio1
 
14.06.16
09:55
(12) Смотри в сторону пула соединений и время жизни
3 Зая Бусечка
 
14.06.16
09:56
(2) На 8.3 пул толком не сделать. Ком-объект дохнет на порядок быстрее, чем в 8.2
4 NoiseRND
 
14.06.16
09:59
Web-сервисы, как альтернатива, не предлагать?
5 Stepa86
 
14.06.16
10:02
(4) Первое подключение через веб-сервис - 2 секунды, что так же не назвать комфортным. Но затраты на разработку через них существенно выше. Так то жду 8.3.9 с пулом и обещанным ускорением в разы.
6 Остап Сулейманович
 
14.06.16
10:07
(5) Работайте с КОМ на клиенте. Одно подключение может жить в течении всего сеанса.
7 vde69
 
14.06.16
10:08
(5) кстати - не советую пытаться добиться работы с COM работы внутри транзакции 1с... много раз уже осуждали...

по этому мне кажется, что сабж изначально дурной....

вместо попыток синхронизации данных с внешней системой внутри транзакции нужно идти в сторону регистрации изменений и обработку коллизий...
8 Stepa86
 
14.06.16
10:10
(6) Не вариант. База работает в том числе через веб. Да и дыра в безопасности это
9 Остап Сулейманович
 
14.06.16
10:12
(8) Тогда никак не ускориться. Смириться с тем, что есть и пытаться решать задачу другими способами.
10 Stepa86
 
14.06.16
10:13
(7) Я понимаю, что лучше делать грамотный обмен с обработкой коллизий и через веб-сервисы, но я не готов ради этой задачи выделять столько ресурсов.
11 hhhh
 
14.06.16
10:18
(10) а зачем вы в фоновом задании юзаете? Просто соханяйте соединение это в параметр сеанса. И используйте
12 Stepa86
 
14.06.16
10:23
(11) в параметре сеанса в 8.3 не сохранить соединение. Само соединение получается в модуле с повторным использованием на сеанс, поэтому первое подключение занимает 10сек, а остальные мгновенно. Кеш живет 20 минут, вроде б, потом опять происходит подключение.

При старте сеанса запускаю фоновое задание, которое получает соединение и кладет его во временное хранилище, при получении соединения сперва смотрю это временное хранилище и если там лежит валидное подключение, то возвращаю его, если нет, то подключаюсь. Таким образом иногда получается в фоне заполучить соединение и пользователь не замечает тормозов. Но вот почти всегда вместо соединения во временном хранилище лежит неопределено.
13 vde69
 
14.06.16
10:24
(10) когда-же Вы научитесь адекватно подходить к ресурсам и задачам?

выбрать можно только 2 из 3х: качественно, быстро, дешево

раз ресурсов мало - значит "дешево" уже имеем, далее имеем 2 варианта

1. быстро и дешево, но не качественно (это твое через COM и ты смирись с долгим временем подключения)
2. качественно и дёшево но долго - жди готового решения от 1с
14 Stepa86
 
14.06.16
10:35
(13) я всегда подхожу к задачам прагматично и адекватно. Именно в этой задаче переписывание всего на правильно не принесет никакого эффекта, кроме морального удовлетворения.
15 Stepa86
 
14.06.16
10:40
+(13) и я знаю неофициальные правила этого форума, что вопрошаемого нужно обязательно ткнуть носом, что он неправильно подходит к задаче
16 Провинциальный 1сник
 
14.06.16
10:40
(12) Сделай один рабочий процесс - Неопределено перестанет восставать из хранилища.
17 Провинциальный 1сник
 
14.06.16
10:42
(1) Нет. Сделай пустую конфигурацию - и загрузка через com будет моментальна. Время тратится на чтение рабочей конфигурации и всякие там инициализации. Запрос ключа в исправной сети - доля секунды.
18 Stepa86
 
14.06.16
10:43
(16) на тестовой архитектуре он и так один всегда, а на боевой ради этой задачи я не буду трогать настройки
19 hhhh
 
14.06.16
10:44
(12) почему нельзя сохранить? например

    Адрес = Неопределено;
    Стр.Обр = ПоместитьВоВременноеХранилище(Новый Структура("Обр", Обр), Адрес);
            
    НовХр = Новый ХранилищеЗначения(Хран);
    ПараметрыСеанса.ОбработчикиБаз = НовХр;

нормально сохраняется в параметр сеанса
20 hhhh
 
14.06.16
10:45
Хран = Новый ТаблицаЗначений;
        Хран.Колонки.Добавить("База");
        Хран.Колонки.Добавить("Обр");
        Стр = Хран.Добавить();
21 Провинциальный 1сник
 
14.06.16
10:45
(18) Суть в том, что если ты кладешь в хранилище ссылку на несереализуемое нечто - то надо понимать, что это нечто находится в памяти того процесса, который его туда положил. И другой взять оттуда его не сможет.
22 Stepa86
 
14.06.16
10:47
(19) Даже если это работает (проверять я это конечно не буду), то это ничем не лучше хранения на модуле с кешем. Временное хранилище все равно живет те же 20 минут и инициализировать все равно нужно.
23 Stepa86
 
14.06.16
10:49
(21) 1С вообще не очень хорошо относятся к пиханию во временное хранилище разных несереализуемых значений. Легко может отвалится при следующем обновлении и фокус с помещением через структуру (фиксированную структуру)
24 Stepa86
 
14.06.16
11:00
(19) Хотя о чем это я, у меня как раз то же самое, только заполняется через фоновое задание