![]() |
|
V83.ComConnector vs V83.Application | ☑ | ||
---|---|---|---|---|
0
Jenstel
26.05.14
✎
12:29
|
Доброго времени суток. Подскажите, почему при соединении с базой 1С с помощью 'V83.ComConnector' любые операции выполняются значительно дольше, чем при подключении с помощью 'V83.Application', например даже одна строка
Con1C.Документы.ПлатежноеПоручение.СоздатьДокумент(); выполняется 5-6 секунд, но если подключение через 'V83.Application', то она выполняется практически моментально. |
|||
1
Cube
26.05.14
✎
12:37
|
(0) Че ты заливаешь? Коннектор на порядок (в 10 раз) быстрее работает...
|
|||
2
shuhard
26.05.14
✎
12:49
|
(0) брехня
|
|||
3
Jenstel
26.05.14
✎
12:51
|
(1) я в курсе, поэтому и сбит с толку
вот полный код, висит на событии нажатия кнопки PP := Con1C.Документы.ПлатежноеПоручение.СоздатьДокумент(); PP.Дата := DateTimeToStr(Now); PP.ПеречислениеВБюджет := true; PP.КодБК := Duty.КодБК; PP.ВидПеречисленияВБюджет := Duty; PP.Контрагент := Customer; PP.Заполнить(Duty); PP.СчетОрганизации := Account; PP.Ответственный := User; PP.СуммаДокумента := '100.00'; PP.НазначениеПлатежа := Destination; PP.Записать; Соединение создаю Com:=CreateOleObject('V83.ComConnector') as IV8ComConnector; Con1C:= Com.Connect ('File="ХХХ";usr=ХХХ;pwd=ХХХ'); Подскажите, в чем может быть проблема. После нажатия на кнопку приложение "подвисает" на 5-6 секунд (кнопка в нажатом состоянии), но стоит соединиться как V83.Application и это все происходит моментально. |
|||
4
acsent
26.05.14
✎
12:56
|
может ключ ищет долго?
|
|||
5
Jenstel
26.05.14
✎
13:12
|
(4) Как ускорить?
|
|||
6
Jenstel
26.05.14
✎
13:38
|
Сделал лог с временем каждой операции. Дольше всех выполняются:
PP.Заполнить(Duty); ~ 2 секунды PP.Записать; ~ 4 секунды |
|||
7
Cube
26.05.14
✎
13:40
|
(6) Может в платформе дело? Какой релиз? поставь другой.
|
|||
8
Jenstel
26.05.14
✎
13:47
|
Еще есть разница в запуске: из компилятора Delphi тайминги как написал выше, а если запускать уже скомпилированный exe - выполнение занимает 1,5-2 секунды.
С 'V83.Application' - вся операция занимает 57 миллисекунд Платформа - 8.3.4.482 |
|||
9
Cube
26.05.14
✎
13:49
|
(8) Попробуй 8.3.5.
|
|||
10
Jenstel
26.05.14
✎
14:26
|
(9) Изменений нет
Может я не так коннектор создаю? |
|||
11
DmitrO
26.05.14
✎
15:03
|
А exe компилируешь 32-битный?
|
|||
12
Jenstel
26.05.14
✎
15:23
|
(11) Да хоть какой.
Я первым подумал на разрядность и возможные косяки. Для чистоты эксперимента перенес исходник на виртуальную машину c WinXP и попробовал скомпилировать и запустить там. Все идентично. Куда копать, ума не приложу. |
|||
13
DmitrO
26.05.14
✎
15:31
|
Ну ты не ответил на вопрос-то..
Приведенное время по ComConnector на какой разрядности приложения? И что значит на "хоть какой", если собрать exe 64-битный тоже работает? |
|||
14
alex007ag
26.05.14
✎
15:33
|
вот так надо,
http://www.forum.mista.ru/confirm.php?id=97474&pass=067c29828a17a6587d0a49c51f746a04 как на 17 секунде |
|||
15
DmitrO
26.05.14
✎
15:33
|
Есть подозрения, что компилятор Delphi слишком умный..
|
|||
16
alex007ag
26.05.14
✎
15:33
|
||||
17
Jenstel
26.05.14
✎
15:33
|
Exe собирал только 32-битный. Все описания только к 32-битной версии.
|
|||
18
alex007ag
26.05.14
✎
15:37
|
(15) Как его притупить немного? :)
Я импортировал библиотеку V83_TLB, может не стоило этого делать? |
|||
19
alex007ag
26.05.14
✎
15:42
|
(18)эта библиотека позволит применить ранее связывание, но только для самого коннектора, а не для полученного им соединения, там полюбому будет позднее.. так что это не повлияет никак.
Я не знаю особенностей компилятора, может он зачем-то маршалит вызовы собственными силами, хотя именно комконнектору это не нужно, т.к. это InProc COM сервер. Хотя даже в этом случае что-то велика разница.. |
|||
20
oleg_km
26.05.14
✎
15:43
|
(18) Импорт tlb наоборот должен только ускорить
|
|||
21
Jenstel
26.05.14
✎
15:47
|
(19) (20) что же делать тогда?
Поделитесь Вашим кодом вызова СОМ-соединителя |
|||
22
DmitrO
26.05.14
✎
15:51
|
сто лет в Delphi не пишу уже.. только с++
думать, читать, думаю пользователю не так критично 5-6 секунд, пусть пока так работают.. надо дождаться тех кот на Delphi пишут, здесь такие есть.. |
|||
23
Jenstel
26.05.14
✎
15:56
|
(22) Я выделил только самую малую часть кода, которая доолжна выполняться. Полный код более 200 строк, да еще и циклы (синхронизация справочником между базой рабочей программы и 1С, создание документов, создание документов на их основе). Полная процедура с созданием 5 документов длиться 27 секунд, тогда как 'V83.Application' делает это за 4.
|
|||
24
DmitrO
26.05.14
✎
16:00
|
Или попробуй переписать через чистый IDispatch, без понтов делфёвого компилятора:
вместо: PP.Записать применять: IDispatch::GetIDsOfNames() IDispatch::Invoke() |
|||
25
DmitrO
26.05.14
✎
16:02
|
хотя врядли поможет.. тут чета другое
|
|||
26
oleg_km
26.05.14
✎
16:08
|
Может для Connector другой РЛС работает?
|
|||
27
DmitrO
26.05.14
✎
16:11
|
(26)Кстати да, неплохая мысль, пользователь 1С тот-же для коннектора используется?
|
|||
28
Jenstel
26.05.14
✎
16:13
|
(27) Для коннектора создал нового юзера (пока с полными правами, база тестовая)
Но пробовал и под своим рабочим логином - результат тот же |
|||
29
Jenstel
26.05.14
✎
16:17
|
А есть возможность сначала собрать текст скрипта, а потом выполнить его целиком в 1С (аналогично SQL execute), а не выполнять построчно каждое действие.
|
|||
30
Jenstel
26.05.14
✎
19:22
|
(29) ап
|
|||
31
Defender aka LINN
26.05.14
✎
19:44
|
(29) Выполнить(), как ни ВНЕЗАПНО
|
|||
32
Jenstel
26.05.14
✎
20:02
|
(31) ВНЕЗАПНО не пашет, не поддерживает метод
|
|||
33
Jenstel
26.05.14
✎
21:18
|
ап
знающие люди, помогите плиз |
|||
34
DmitrO
26.05.14
✎
21:33
|
Нет такой возможности. Выполнить() работать не будет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |