|
![]() |
#1 |
Участник
|
Выгрузку исправил
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#2 |
Коллективное бессознательn ое
|
![]()
Сразу извиняюсь, что тестирование не по правилам - ночь на дворе, предлагаю просто в качестве идеи.
Выгрузку ниже делал дома, подключившись через интернет к терминальному серверу. Файл "111.xls" лежит у меня дома на диске "С", т.е. файл пишется через интернет. Код ниже прошел за 59 секунд. Тут использовались "самодельные" классы-оболочки АДО, но идея проста - берем АДОКомманд и пишем запрос "INSERT INTO". Единственный момент - видимо, придется до начала процедуры задать имена столбцов обычным способом, а потом уже грузить данные. CREATE COLUMN я не пербовал, но может и пройдет, зависит от драйвера, если пройдет, будет быстрее. ![]() Код: static void Job122(Args _args) { ADOConnection connection; ADOCommand command; int i; int timeFullStart, timeFullFinish, timeFullTotal; ; timeFullStart = timenow(); connection = ADODB::establishConnection("C:\\111.xls", false); command = new ADOCommand(); command.ActiveConnection(connection); while(i<50000) { command.CommandText(strFmt("INSERT INTO [Лист1$] (Field1, Field2) VALUES (100000000000000000000, 20000000000000000)")); command.Execute(); i++; } connection.Close(); timeFullFinish = timenow(); timeFullTotal = timeFullFinish - timeFullStart; info('Время выполнения, сек'); info(int2str(timeFullTotal)); }
__________________
Жизнь такова, какова она есть и больше никакова. |
|
![]() |
#3 |
Moderator
|
Цитата:
Сообщение от KSS
Сразу извиняюсь, что тестирование не по правилам - ночь на дворе, предлагаю просто в качестве идеи…
идея проста - берем АДОКомманд и пишем запрос "INSERT INTO"…. Но зачОт пока поставить не могу. ![]() В первую очередь, конечно, потому, что далековато от «Условий конкурса»: фактически у Вас в цикле 50 тыс. раз вставляется одна и та же запись, т.е. нет фетча по таблицам Аксы, а на фетч тратится довольно большой процент времени. В вторую очередь - это даже не "очередь", а мое очень субъективное "ИМХО" - потому что Ваш вариант несколько тяжеловат – существует, опять же ИМХО, более элегантное решение, приведенное здесь (Господи, не дай возгордиться и захвалиться!). Там на стороне Axapta данные загружаются в ADODB.Recordset в оперативной памяти (без связи с БД, как в массив), а на стороне Excel вставляются – не устаю восхищаться! – одной единственной командой Range.CopyFromRecordset. Посмотрите, сравните. Это не может не понравиться. Хотя по скорости, конечно, несколько уступает быстрокрылым способам AndyD-а, но не на порядок (чуть позже я выложу свою «конкурсную» версию). Зато прозрачность реализации подкупает. Однако, я совсем не отговариваю Вас от Вашего подхода. Оформите джобик «по правилам» и выкладывайте – будем его хронометрировать на моей «эталонной» машине и сохранять для благодарных потомков. |
|
![]() |
#4 |
Коллективное бессознательn ое
|
Цитата:
Сообщение от Wamr
Вот такой код отрабатывает за 35 сек на
Celeron-2,5/ 512Mb Excel-2000 Win2000 Оно позволяло выгружать в экселевские файлы данные из стандартного диалога печати аксапты. Колумбус, помнится, его продавал...
__________________
Жизнь такова, какова она есть и больше никакова. |
|
![]() |
#5 |
Участник
|
[QUOTE=Wamr;110027]Вот такой код отрабатывает за 35 сек на
Celeron-2,5/ 512Mb Excel-2000 Win2000 QUOTE] Здесь, кстати, не мешало бы использовать функцию, как в одном из методов, предоставленных AndyD - для смены раскладки. |
|
![]() |
#6 |
Moderator
|
2 kashperuk: Иван, как приятно Ваш комментарий
Цитата:
Спасибо. Очень рад, что вы такой бескорыстный
![]() |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от Gustav
![]() 2 kashperuk: Иван, как приятно Ваш комментарий к репутации AndyD'у за этот его пост контрастирует с Спасибо! В общем, "Can't Buy Me Love", короче!
![]() ![]() Побольше бы таких вот бескорыстных. Работа бы была - просто в кайф. Она и щас ничего, конечно. ![]() |
|
Теги |
benchmark, download, excel, faq, xml, законченный пример, производительность, экспорт/импорт |
|
|