Как быстро сформировать из ADO SQL -> ТЗ #129097


#0 by _r2003
Есть запрос к SQL серверу на ADO получить результат в тз проблемы не представляет проблему представляет скорость работы этого дела Посоветуйте что нить может есть способ быстрее? на 7.7 в 1с++ быстрее как они делают?
#1 by _r2003
Так поднимем повыше...
#2 by _r2003
Ещё раз...
#3 by _r2003
Ещё раз... Приятно иногда посидеть в тишине...
#4 by Волшебник
"очень долго" - это сколько?
#5 by _r2003
в общем была обработка загрузки данных на 7.7 теперь она стала из за этого в 5 раз дольше работать. вроде как раньше от процесса было запрос процентов 10 теперь 50%
#6 by Волшебник
Может быть поиграться свойствами RecordSet? или сфорировать более оптимальный запрос?
#7 by _r2003
Может быть и поиграться а в каком направлении копать? запрос проще не куда получить строки документа. Не понятно только почему в 1c++   Это было быстра.
#8 by _r2003
Не помогает
#9 by DmitrOshchepkov
в 1с++ делается точно также, только там не ADO и код компилированый
#10 by igork1966
Интересно, а где у тебя в коде колонки ТЗ создаются?
#11 by _r2003
А что там?
#12 by DmitrOshchepkov
там естественно ODBC
#13 by DmitrOshchepkov
еще, возможно у тебя в ADO используется не тот тип курсора, надо самый быстрый fast forward (на нем кстати MoveFirst не возможно) почитай доку по ADO, я не помню.. это свойствами Recordset управляется а вообще говоря вродебы, если ни чего не трогать, то он и должен был быть по умолчанию fast forward.
#14 by _r2003
ODBC а как использовать ODBC
#15 by _r2003
В том смысле как называется DLL
#16 by _r2003
или класс
#17 by _r2003
А лучше пример кода
#18 by DmitrOshchepkov
:) odbc нельзя использовать в 1с напрямую.. напрямую - только в языках более низкого уровня (с++) В 1с можно использовать только OLE объекты, OLE объектов упаковывающих ODBC интерфейс в чистом виде - нет. В ADO можно использовать OLEDB провайдера для odbc и odbc драйвер для mssql, но это будет еще хуже чем использовать (в том же ADO) OLEDB провайдера для mssql. Вобщем если тип курсора используется тот же, то потери только на интерпретаторе языка высокого уровня (V8).
#19 by Матрейя
Для чего один массив перегружать в другой? Так и юзай рекордсет далее, без ТЗ.
#20 by Матрейя
+19. Пример постраничной визуализации рекорстета есть в КУЛ.
#21 by _r2003
to 20 ИМХО все операции по выводу и обработке тз буду проходить быстрее так как тз родной объект 1с а recordset нет тесты показали что время как раз отнимает получение значения из recordset а не запись в тз to 18 Спасибо стало понятней жалко что в 1С нет объекта для сиквэл запросов или есть я натыкался на топик что Объект COMSafeArray (COMSafeArray) что то может, это правда?
#22 by _r2003
ПоляADO=RecordSet.Fields ....... Строка[й]=ПоляADO.Item(й).Value; .......
#23 by _r2003
Так поднимем повыше...
#24 by DmitrOshchepkov
to 22 и? вероятно стало чуть быстрее.. >>жалко что в 1С нет объекта для сиквэл запросов или есть нет нету, но можно написать ВК.. код будет компилированый, он будет работать заметно быстрее, но тем не менее все равно будет проигрывать 1с++, т.к. там еще используется внутренний интерфейс ТЗ (родного объекта 1с (с++)), что в V8 невозможно. >>COMSafeArray а причем тут он? в OLE один из стандартных передаваемых типов SAFEARRAY этот объект сделан для передачи параметра типа SAFEARRAY при вызове метода некого OLE объекта (если бы этого объекта небыло то такой метод в принципе будет невозможно вызвать, как в V7 например).
#25 by DmitrOshchepkov
++ кроме того, при использовании ADO все идет через ОЛЕ объекты (IDispatch) и варианты (VARIANT), эти преобразования тоже отнимают процессорное время. А в 1с++ я постарался вообще выжать максимум по скорости (нет предела совершенству, конечно, но хотябы прикрыть потенциальные дыры). 19 прав, в данном случае более быстрым будет использование recordset без ТЗ. (однако 19 надо поправить, перебираемый recordset это не массив; в памяти нет всей выборки, она приходит с сервера построчно или по несколько строк)
#26 by _r2003
Всем спасибо тема закрыта.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С