К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Выгрузка большого текстовика (10 Мб) - чем?

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

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



1 - 26.08.2018 - 18:19
В результате экспериментов выяснилась удивительная вещь

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

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

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

стр = стр +
+ "|" + СокрЛП(Выборка2.НомерДокумента) + "|" + СокрЛП(Выборка2.ДатаДокумента)
+ "|" + СокрЛП(Выборка2.Комментарий) + Символы.ПС;
КонецЦикла;
КонецЦикла;
2 - 26.08.2018 - 18:22
а вот такой код отрабатывает 2 минуты
Цитата:
ТекстовыйФайлЗапись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8);

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

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

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

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

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

Отредактировано EarlyBird; 26.08.2018 в 18:23. Причина: отступы
3 - 26.08.2018 - 18:41
то есть, огромная потеря времени идёт при аккумулировании этой многострочной строки длиной 10 Мб.
Если не накапливать её, а сразу скидывать построчно в файл, всё летает просто.
4 - 26.08.2018 - 19:46
Я бы сказал, что это логично... На самом деле файл будет записываться несколько дольше этих 2-х минут, но это уже будет головная боль не 1с, а операционной системы.
5 - 26.08.2018 - 20:10
4-bma1 > сейчас всё задание отрабатывает за 52 секунды (ещё чуть-чуть подпилил)
6 - 26.08.2018 - 20:17
Тема - БоБо (боян бородатый), диагноз автора - гуглобан: https://www.forum.mista.ru/topic.php?id=283358
7 - 26.08.2018 - 22:41
(6) эмммм
ты действительно полагаешь, что несложно раскопать ветку 11-летней давности среди мистовских завалов дерьма?
Ветку, в которой всего три авторских сообщения, и ни одного коммента других участников, и судя по всему, она никем не замеченная молниеносно свалилась с первой страницы за 5 минут своей короткой жизни.
Гость
8 - 27.08.2018 - 05:43
Я вообще не понял зачем при записи в текстовый файл самому добавлять перевод строки. Сформировал строку - пиши, формируй следующую. А для записи и чтения много лет пользуюсь FSO. Семерочный "text" FSO уделывает в разы, с 8-ым не сравнивал, просто потому что привык к FSO


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены