Имя: Пароль:
1C
1С v8
Долгое закрытие ADODB.Connection на тонком клиенте
0 Ненавижу 1С
 
гуру
01.02.21
00:44
Почему может тупить закрытие ADODB.Connection на тонком клиенте?

Вот код:

Функция ПолучитьМассивСтруктурДанныхИзФайла(ИмяФайла,МассивПолей,НомерЛиста=1,НомерПервойСтрокиЗначений=0) Экспорт

    МассивОписанияПолей = МассивСтруктурОписанияПолей(МассивПолей);
    
    СтрокаСоединения = "
    | Provider=Microsoft.ACE.OLEDB.12.0;Data Source="""+СокрЛП(ИмяФайла)+""";
    | Extended Properties=""Excel 12.0 Xml;HDR=NO;ReadOnly=1""";
    Соединение = Новый COMОбъект("ADODB.Connection");    
    Соединение.Open(СтрокаСоединения);                   
    
    SchemaTables = 20;
    RecordsetTables = Соединение.OpenSchema(SchemaTables);
    й = 1;
    ЛистНайден = Ложь;
    Пока НЕ RecordsetTables.Eof() Цикл
        Лист = RecordsetTables.Fields("TABLE_NAME").Value;        
        Если й=НомерЛиста Тогда
            ЛистНайден = Истина;
            Прервать;            
        КонецЕсли;
        RecordsetTables.MoveNext();
        й = й+1;
    КонецЦикла;    
    RecordsetTables.Close();
    Если Не ЛистНайден Тогда
        ВызватьИсключение "Лист не найден!";
    КонецЕсли;
    
    
    Записи = Новый COMОбъект("ADODB.Recordset");                   
    ТекстЗапроса = "SELECT * FROM ["+Лист+"]";
    Записи.Open(ТекстЗапроса, Соединение);        
    МассивДанных = Записи.GetRows().UnLoad();
    Записи.Close();
    Соединение.Close(); //<---------------------ВОТ ЗДЕСЬ! до 75% времени в замере работы обработки (но не всегда)
    Соединение = Неопределено;
1 acht
 
01.02.21
01:06
(0) Пушо, ADO, оно по умолчанию своеобразно в пул пытается, не находя при этом понимания нижлежащего "Microsoft.ACE.OLEDB". Получай набор записей как результат ".Execute", и дай ему возможность пожить своей жизнью после выхода переменных из области видимости, без всяких там "= Неопределено"
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс