Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Выгрузка большого текстовика (10 Мб) - чем? (http://forums.kuban.ru/f1040/vygruzka_bol-shogo_tekstovika_10_mb_-_chem-8707819.html)

EarlyBird 26.08.2018 17:32

Выгрузка большого текстовика (10 Мб) - чем?
 
Всем доброго времени!
Столкнулся с проблемкой.
Регламентное задание выгружает файл обмена. Файл текстовый, 44 тысячи строк, 10 Мб.
Всё это занимает по времени полтора часа.
Задание делает запрос, затем обходит его и запихивает всё в текстовую строку, затем сохраняет текст через объект ЗаписьТекста.
99% времени уходит именно на обход выборки запроса.

Можно ли как-то ускорить формирование файла?
Если просто сформировать тот же самый отчёт в интерактивном режиме (есть отчётик на СКД) и сохранить как XLS, укладываюсь в 5 минут.
Но СКД не сохраняет в текст.

EarlyBird 26.08.2018 18:19

В результате экспериментов выяснилась удивительная вещь

Вот такой код отрабатывает полтора часа

[quote]стр = "";
Пока Выборка1.Следующий() Цикл
стр = стр
+ "|" + СокрЛП(Выборка1.Код) + "|" + СокрЛП(Выборка1.НаименованиеПолное)
+ "|" + СокрЛП(Выборка1.ИНН) + "|" + СокрЛП(Выборка1.ФактическийАдрес) + Символы.ПС;

Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка2.Следующий() Цикл

стр = стр +
+ "|" + СокрЛП(Выборка2.НомерДокумента) + "|" + СокрЛП(Выборка2.ДатаДокумента)
+ "|" + СокрЛП(Выборка2.Комментарий) + Символы.ПС;
КонецЦикла;
КонецЦикла;[/quote]

EarlyBird 26.08.2018 18:22

а вот такой код отрабатывает 2 минуты
[quote]ТекстовыйФайлЗапись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8);

Пока Выборка1.Следующий() Цикл
стр = СокрЛП(Выборка1.Код) + "|" + СокрЛП(Выборка1.НаименованиеПолное)
+ "|" + СокрЛП(Выборка1.ИНН) + "|" + СокрЛП(Выборка1.ФактическийАдрес);

ТекстовыйФайлЗапись.ЗаписатьСтроку(стр);

Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка2.Следующий() Цикл
стр = СокрЛП(Выборка2.НомерДокумента) + "|" + СокрЛП(Выборка2.ДатаДокумента)
+ "|" + СокрЛП(Выборка2.Комментарий);

ТекстовыйФайлЗапись.ЗаписатьСтроку(стр);
КонецЦикла;
КонецЦикла;

ТекстовыйФайлЗапись.Закрыть();[/quote]

EarlyBird 26.08.2018 18:41

то есть, огромная потеря времени идёт при аккумулировании этой многострочной строки длиной 10 Мб.
Если не накапливать её, а сразу скидывать построчно в файл, всё летает просто.

bma1 26.08.2018 19:46

Я бы сказал, что это логично... На самом деле файл будет записываться несколько дольше этих 2-х минут, но это уже будет головная боль не 1с, а операционной системы.

EarlyBird 26.08.2018 20:10

4-bma1 > сейчас всё задание отрабатывает за 52 секунды (ещё чуть-чуть подпилил)

Ткачик 26.08.2018 20:17

Тема - БоБо (боян бородатый), диагноз автора - гуглобан: [url]https://www.forum.mista.ru/topic.php?id=283358[/url]

EarlyBird 26.08.2018 22:41

(6) эмммм
ты действительно полагаешь, что несложно раскопать ветку 11-летней давности среди мистовских завалов дерьма?
Ветку, в которой всего три авторских сообщения, и ни одного коммента других участников, и судя по всему, она никем не замеченная молниеносно свалилась с первой страницы за 5 минут своей короткой жизни.

USSR 27.08.2018 05:43

Я вообще не понял зачем при записи в текстовый файл самому добавлять перевод строки. Сформировал строку - пиши, формируй следующую. А для записи и чтения много лет пользуюсь FSO. Семерочный "text" FSO уделывает в разы, с 8-ым не сравнивал, просто потому что привык к FSO


Текущее время: 16:49. Часовой пояс GMT +3.