Имя: Пароль:
1C
 
V8x.COMConnector Disconnect
0 technik-1c
 
31.03.15
13:06
Как правильно разрывать/завершать соединение
начатое ком-коннестором?

Connect1C = CreateOleObject('V83.COMConnector');

при простом закрытии приложения, соединение висит какое-то время.
1 ДенисЧ
 
31.03.15
13:06
Зануляй ВСЕ переменные, созданные через коннектор
2 technik-1c
 
31.03.15
13:16
1) в Unussigned?
2) занулить переменную коннектора не достаточно?
3 ДенисЧ
 
31.03.15
13:19
(2)
1. в ""
2. нет
4 hawksib
 
31.03.15
13:33
А так не подходит?:

СтрокаПодключение = Srvr='ServerName';Ref='1SBase'; usr='admin'; pwd='Парлоь'
Соединение = Connect1C.Connect(СтрокаПодключения);
...
какой-то код
...
Соединение = Неопределено;
5 smitru
 
31.03.15
13:41
(4) Подходит в части коннектора, но тебе сказали, что и любые ком-объекты на основе этого коннектора лучше всего так же "обнулять".
6 ДенисЧ
 
31.03.15
13:44
(5) не "лучше всего", а "необходимо".
7 H A D G E H O G s
 
31.03.15
13:46
(0) Двоеточие в операции присваивания забыл.
(0)

Connect1C:=unnasigned;
CoFreeUnusedLibrariesEx(100,0);
sleep(100);
CoFreeUnusedLibrariesEx(0,0);
8 H A D G E H O G s
 
31.03.15
13:50
еще можно пощитать количество ссылок на твой объект:

refcount:=IDispatch(Connect1C)._Addref()-1;
IDispatch(Connect1C)._release();
9 technik-1c
 
31.03.15
13:56
буду пробовать.
спасибо.
10 technik-1c
 
01.04.15
10:13
(4)
Соединение при таком способе остается. (

нет ли что-нибудь типа

Connect1C.Disconnect;
или
Connect1C.Free;

?

(7)
Соединение остается.
11 Гёдза
 
01.04.15
10:26
у ком объекта нет таких методов, только костыли типа (7).
В вызове из 1с освободить нельзя
12 technik-1c
 
01.04.15
11:40
Готов на работающие костыли)

После (7) остается активное соединение.

Или это сервер приложений 1С кеширует соединение?
13 technik-1c
 
01.04.15
12:05
(8) тоже не освобождает

Connect1C := null; - работает, но не освобождает


на freeAndNil(Connect1C);  - конкретно подвисает
14 H A D G E H O G s
 
01.04.15
12:25
(13) У меня все отлично закрывается.
Правда на пустой конфигурации.

Если соединение закрывается через некоторое время - это норма, приложению нужно время чтобы выгрузить конфигурацию.
15 DmitrO
 
01.04.15
12:33
вообще-то сам комконнектор же пул соединений поддерживает
16 H A D G E H O G s
 
01.04.15
12:42
(15) Моя не понимать про ваши пулы.

Connector:=CreateOleObject('v82.comconnector');
Connection:=Connector.connect('file="D:\database\8.2\Empty"');

загружается позвизды dll-ок, от dll ком-коннектора, ядра, xdto обработки, до графической подсистемы + много типовых dll Windows. Создается соединение.

Connection:=Unassigned;
Connector:=Unassigned;
выгружается почти весь зоопарк dll, рубится соединение.

CoFreeUnusedLibrariesEx(100,0);
sleep(200);
CoFreeUnusedLibrariesEx(0,0);

выгружаются оставшиеся dll (ком-коннектор, ядро, немного типового Windows). Соединения уже нет, рубиться нечему.
17 Бубка Гоп
 
01.04.15
12:45
мб не хватает
GC.Collect()
?
18 H A D G E H O G s
 
01.04.15
12:46
Немного статистики

Итого у приложения было загружено:
27 dll изначально
107 dll в пике
55 dll после закрытия соединения
42 dll после вызова очистки dll-ок без ссылок на них.
19 Бубка Гоп
 
01.04.15
12:47
(18) хде еще 10?
20 H A D G E H O G s
 
01.04.15
12:48
(19) Ты о чем?
21 H A D G E H O G s
 
01.04.15
12:48
(17) Не пишите о том, о чем не имеете понятия.
22 Бубка Гоп
 
01.04.15
12:55
(21) аа, так это делфи... тьфу ты
23 technik-1c
 
01.04.15
13:01
(13) Ну не 15 же минут.)

(14) Ты смотришь соединения или сеансы?
24 H A D G E H O G s
 
01.04.15
13:03
(23) момент, я смотрел на файловой.
25 H A D G E H O G s
 
01.04.15
13:14
(23) И сеанс и соединение закрываются после Connection:=Unassigned;
26 DmitrO
 
01.04.15
13:28
(16)из СП:

Менеджер COM-соединений (COM connector)
PoolTimeout (PoolTimeout)
Использование:

Только чтение.
Описание:

Тип: Число.
Максимальное время нахождения в пуле неиспользуемого соединения с информационной базой. После истечения этого времени неиспользуемое соединение освобождается.
27 DmitrO
 
01.04.15
13:30
Менеджер COM-соединений.Connect (COM connector.Connect)
Менеджер COM-соединений (COM connector)
Connect (Connect)
Синтаксис:

Connect(<СтрокаСоединения>)
Параметры:

<СтрокаСоединения> (обязательный)

Тип: Строка.
Строка параметров (Строка соединения), используемая 1С:Предприятием для соединения с информационной базой.
Возвращаемое значение:

Тип: Внешнее соединение.

Описание:

Создает соединение с информационной базой 1С:Предприятия 8.
Устанавливает соединение с информационной базой 1С:Предприятия 8 и возвращает ссылку на объект Внешнее соединение.
Установка соединения выполняется по следующему алгоритму:
1. Внешнее соединение с требуемыми параметрами ищется в пуле соединений. Если найдено, то используется оно.
2. Если Внешнее соединение с требуемыми параметрами не найдено, то анализируется не исчерпан ли лимит по числу одновременно существующих соединений. Если не исчерпан, то создается новое Внешнее соединение.
3. Если лимит исчерпан, но при этом в пуле имеются неиспользуемые Внешнее соединение, то соединение, дольше всех находящееся в пуле, удаляется и создается новое Внешнее соединение.
4. Если никаким способом найти подходящее или создать новое Внешнее соединение не удалось, то происходит ожидание освобождения Внешнее соединение другим потоком, после чего весь процесс повторяется, начиная с пункта 1.
28 technik-1c
 
01.04.15
15:52
при таком коде

    Соединение  := UnAssigned;
    Соннектор   := UnAssigned;

Да. Соединение обрубается, но после закрытия приложения.

Такой вариант подходит.

Спасибо.

PS
Как ни странно, при добавлении
    
    CoFreeUnusedLibrariesEx(100,0);
    sleep(200);
    CoFreeUnusedLibrariesEx(0,0);

соединение остается висеть))
Закон Брукера: Даже маленькая практика стоит большой теории.