Здравствуйте! Если я пишу данные и ТаблицыЗначений в 34 текстовых файла по 2Мб, то это занимает чуть меньше 3-х минут, а если пишу 6 Мб в один текстовый файл, то это занимает 48 минут. Но ведь должно быть наоборот. пишу черед ТекстовыйДокумент. Можете подсказать как ускорить? Были мысли сделать выгрузку через ЗначениеВСтрокуВнутр и удалить оттуда все лишнее, но ведь у даже у "бесконечной" строки, вроде, тоже есть ограничения.
---
Можете подсказать как ускорить?
Если сообразите (и вообще знаете что это такое), то используйте Потоковый вывод!
в разы ускоряет вывод данных!
---
Вангую, вы формируете одну большую строку конкатенацией, а потом ее записываете в файл.
---
Можете подсказать как ускорить?
Если сообразите (и вообще знаете что это такое), то используйте Потоковый вывод!
в разы ускоряет вывод данных!
---
Потоковый вывод

вы имеете ввиду что-то типа вот этого: https://infostart.ru/1c/articles/1130284 ?

а есть ли какое ограничение на длину полученной строки с помощью СтрСоединить?
---
мб привести код записи? Для начала сделать замер производительности, мб у вас тормозит не запись в файл вообще
---
исправился, см. чуть ниже
---
Придумал!!! Вот, если кому надо.

//Было так: (упрощенная запись)

//1. запись в 34 файла. Это было 3 минуты

ПолучаюСписокОбъектов

```1c
    Для каждого ТекущийОбъект из СписокОбъектов цикл
    ТЗ = ЗапросДанныхТекущегоОбъекта.Выгрузить()
    ТФ = Новый ТекстовыйДокумент;

    для каждого стр из ТЗ цикл
    ТФ.ДобавитьСтроку(ВсеПоляТзВОднуСтроку)
    КонецЦикла
    ТФ.Записать(ИмяФайла)
    КонецЦикла
```

// 2. Запись всех данных в один файл, т.е. то что было долго

ЗапросДанныхВсехОбъектовСразу

```1c
    ТФ = Новый ТекстовыйДокумент;

    Для каждого стз из ТЗ Цикл
    ТФ.ДобавитьСтроку(ВсеПоляТзВОднуСтроку)
    КонецЦикла

    ТФ.Записать(ИмяФайла)
```

//3. Стало и занимает 30 секунд

```1c
    Запрос = новый Запрос;

    Запрос.Текст = "ВЫБРАТЬ
    | ОТМКМ КАК КМ,
    | ОТМ.КТ КАК КТ,
    | ОТМ.ОТ КАК ОТ
    |ИЗ
    | РегистрСведений.ОТМ КАК ОТМ";

    ТаблицаОТМ = Запрос.Выполнить().Выгрузить();

    Мас = Новый Массив;
    мас.Очистить();
    для каждого стр из ТаблицаОТМ цикл
    Мас.Добавить(Формат(стр.КМ, "ЧГ=0")+";"+Формат(стр.КТ, "ЧГ=0")+";"+формат(стр.ОТ, "ЧГ=0"));
    КонецЦикла;

    ФайлТЗ = Новый ЗаписьТекста;
    ФайлТЗ.УстановитьТекст(СтрСоединить(мас,Символы.ПС));
    ФайлТЗ.Записать(ИмяФайла,"CESU-8");
```

Вот только смущает, нет ли ограничение на длину полученной строки с помощью СтрСоединить?
---
Сообщение было скрыто модератором.
---
исправился
---
Мас = Новый Массив;
мас.Очистить();
для каждого стр из ТаблицаОТМ цикл
Мас.Добавить(Формат(стр.КМ, "ЧГ=0")+";"+Формат(стр.КТ, "ЧГ=0")+";"+формат(стр.ОТ, "ЧГ=0"));
КонецЦикла;
```1c
    Запись = Новый ЗаписьТекста(ИмяФайла, бла-бла-бла...);
    для каждого стр из ТаблицаОТМ цикл
    Запись.ЗаписатьСтроку(
    СтрШаблон("%1;%2;%3", Формат(стр.КМ, "ЧГ=0"), Формат(стр.КТ, "ЧГ=0"), формат(стр.ОТ, "ЧГ=0"))
    )
    КонецЦикла;
    Запись.Закрыть();
```
---
Если вместо Формат использовать XMLСтрока, то будет еще быстрее
---
В (12) есть cf-ник - поэкспериментируйте.
---
Попробовал с XMLСтрока:Запись через запись текста: 1 802
Запись через XML: 1 805
Запись через запись текста: 1 806
Запись через XML: 1 816
Запись через запись текста: 1 803
Запись через XML: 1 835
Примерно то же самое и получилось. Запись текста чуть быстрее, остальное в пределах погрешности.
---
Не, я не прав:Запись через запись текста: 484
Запись через XML: 500
Запись через запись текста: 492
Запись через XML: 490Убрал отладку еще. Так что полсекунды. Даже вот XML выиграла один раз ))))
---
нужен csv с разделителями
---
А что такое "csv с разделителями"?
---
И? В (17) финальный вариант. Там аж два механизма потоковой выгрузки "CSV с разделителями", которые на 100к строк на моем ноуте делают это за полсекунды. Вы вообще результат-то смотрели? А ХМЛСтрока - она ровно то же делает, что и формат - "убирает" разделитель групп, только быстрее.
---
быстрее будет так:

```1c
    ТекстПостроитель = Новый ЗаписьXML;
    ТекстПостроитель.ОткрытьФайл(ИмяФайла, Кодировка);
    Для Каждого Стр из ТЗ По Цикл
    ТекстПостроитель.ЗаписатьБезОбработки(<строка> + Символы.ПС);
    КонецЦикла;
    ТекстПостроитель.Закрыть();
```
---
быстрее будет так:Проверил на 100к строках код из (10) и Ваш:
Запись через запись текста: 1 815 мс
Запись через XML: 1 820 мс
Запись через запись текста: 1 819 мс
Запись через XML: 1 831 мс
Запись через запись текста: 1 798 мс
Запись через XML: 1 817 мсНу не сказать, что запись текста сильно быстрее, но быстрее. Во вложении cf, погоняйте у себя.
ЗЫ: 22-я платформа. Учебная. Только что скачал и поставил. Проц - рязань 5500U, ОС венда 11.
ЗЫЗЫ: забыл в Вашем варианте прибавить ПС. С ним, полагаю, еще дольше будет.
---
спасибо, но нужен csv сразделителями
---
В общем с XMLСтрока и ЗаписьТекста полсекунды на 100к строк.
Запись через запись текста: 500
Запись через XML: 487
Запись через запись текста: 485
Запись через XML: 483
Запись через запись текста: 499
Запись через XML: 487Без отладчика в общем-то пофиг, что юзать: запись текста или XML.
---
И давно XMLСтрока доступна в тонком клиенте?
---
И давноОдновременно с таблицей значений и запросами.
И, специально для редкостных душнил, одновременно с записью текста в веб клиенте.
---
Попробуйте перечитать мой вопрос, не считая его издевкой. Я не знал, что метод XMLСтрока доступен на тонком клиенте (а он доступен, вопреки СП), вот и спросил всегда ли было так.
---
XMLСтрока доступен на тонком клиенте (а он доступен, вопреки СП)
Он доступен с большими ограничениями. Примитивные типы поддерживает. А вот ссылочные уже нет.
Может по этому в СП и не указан тонкий клиент.