Сравнение скорости загрузки большого массива данных из табличного документа с помощью Microsoft EXCEL через COM и с помощью платформы 1С 8.х

Публикация № 1119024

Разработка - Обмен данными 1С - Загрузка и выгрузка в Excel

COM MS EXCEL 1C Сервер Загрузка Выгрузка Большие массивы данных

4
Тестирование COM MS Excel на сервере 1С и нативное чтение табличных документов в 1С.

Решил развенчать мифы по поводу "тормознутости" технологии COM при работе с Microsoft Excel и оперировании большими объемами данных.

Большими объемами данных в данном случае будет считаться матрица 50к х 20 элементов, т.е. 1Миллион элементов.

Для этого была создана простейшая обработка (проверена на платформе 8.3.14.1565), которая один и тот же табличный файл может читать как с привлечением MS Excel на клиенской машине, так и с помощью нативной возможности платформы 1С 8.х, появившейся уже достаточно давно.

Итак, первым в забеге был MS EXCEL.

Т.к. тест проводился в клиент-серверной базе, и на сервере приложения 1С не установлен MS Excel, то в данном случае придется передавать большой объем данных с клиента 1С на сервер 1С.

Результаты теста следующие:

Выделенные строки - это ЧИСТОЕ время формирования ТЗ на 1миллион значений. Чистое время составляет 0.785961 секунды. Время получения самого массива данных из MS Excel в 1С:

Т.е. 0.557474 секунды.

ИТОГО: 0.785961 + 0.557474 = 1.343435 секунды.

Время на передачу массива между клиентом и сервером не считаем, т.к. на сервере 1С установлен MS Excel.

 

Вторым был нативный метод чтения табличных документов платформой 1С.

Т.к. тест проводился в клиент-серверной базе, в данном случае придется передавать сам файл с клиента 1С на сервер 1С. Время передачи файла - 0.770753 секунды.

Результаты теста следующие:

Выделенные строки - это ЧИСТОЕ время формирования ТЗ на 1миллион значений. Чистое время составляет 22.394099 секунд.

ИТОГО: 0.770753(время на передачу файла с клиента 1С на сервер 1С) + 15.752302(время на чтение табличного документа из файла)  + 22.394099 секунд = 38.917154 секунды.

 

Внимательный читатель спросит: "почему при чтении через COM не учитывается время на передачу файла с клиента 1С на сервер?"

Ответ: Вносим корректировки в результаты.

Вариант1:

ВремяПередачиФайлаСКлиентаНаСервер = 0.770753 секунды

ОбщееВремяФормированияТЗ = 1.343435 секунды

Итого: 1 секунда на запуск Excel и открытие файла + 2.114188 секунды

 

Мораль сей басни такова: не стесняйтесь использовать Microsoft Excel на сервере 1С - это ЗАМЕТНО увеличивает скорость выгрузки/загрузки данных в/из табличных документов.

4

Скачать файлы

Наименование Файл Версия Размер
ТестированиеРаботыMSExcel
.epf 7,19Kb
06.09.19
1
.epf 8.3.14.1565 7,19Kb 1 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Abris9 22 08.09.19 09:41 Сейчас в теме
медленный в том случае, если считывать по ячейкам (через Cell), а если через COMSafeArray - то быстро.
2. CheBurator 3395 08.09.19 10:18 Сейчас в теме
3. nomad_irk 8 08.09.19 10:33 Сейчас в теме
(2)ADO использует тот же COM, только умеет работать с массивами.
4. kirillkr 28 09.09.19 12:02 Сейчас в теме
(0), если можно код приведите чтения средствами платформы. Что-то ощущение, что происходили какие-то ненужные операции в цикле, которые совсем не нужны.
6. nomad_irk 8 09.09.19 12:41 Сейчас в теме
(4) Перезамерил время. Вот так более информативно.
5. nomad_irk 8 09.09.19 12:19 Сейчас в теме
(4)Ничего там не используется, кроме тупого перебора всего миллиона ячеек, в отличие от варианта с MS Excel.
7. kirillkr 28 09.09.19 14:43 Сейчас в теме
(5), очень странно.. Я понял, что я был не прав в первом случае про циклы, т.к. не учел что надо перевести еще данные в ТЗ. Но можете попробовать тот же фокус с форматом xlsx? На сколько будет отличаться скорость чтения.
8. nomad_irk 8 09.09.19 15:08 Сейчас в теме
(7) Да без разницы.


обойти миллион значений - ДОЛГО в любом случае.

Для того, что бы было быстро, ТабДок должен уметь делать

МассивЗначений = ТабДок.Область(НачальнаяСтрока, 1, КонечнаяСтрока, 1).Значение;

И
МассивМассивовЗначений = ТабДок.Область(НачальнаяСтрока, 1, КонечнаяСтрока, КонечнаяСтрока).Значение;


Пока этого не будет - MS Excel будет вне конкуренции.

Причем МассивМассивов должен содержать в себе массивы по колонкам, а не по строкам, как это делает Ado.Recordset и OpenOffice/LibreOffice.
Оставьте свое сообщение