ускорение записи в текстовый файл

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

Если сообразите (и вообще знаете что это такое), то используйте Потоковый вывод!
в разы ускоряет вывод данных!
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. Sashares 34 30.12.22 09:47 Сейчас в теме
(1)Вангую, вы формируете одну большую строку конкатенацией, а потом ее записываете в файл.
4. soft_wind 30.12.22 10:13 Сейчас в теме
(1)
Можете подсказать как ускорить?

Если сообразите (и вообще знаете что это такое), то используйте Потоковый вывод!
в разы ускоряет вывод данных!
8. user1103189 30.12.22 10:44 Сейчас в теме
(4)
Потоковый вывод


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

а есть ли какое ограничение на длину полученной строки с помощью СтрСоединить?
2. user1278383 3 30.12.22 09:41 Сейчас в теме
мб привести код записи? Для начала сделать замер производительности, мб у вас тормозит не запись в файл вообще
9. user1103189 30.12.22 10:45 Сейчас в теме
(2) исправился, см. чуть ниже
5. user1103189 30.12.22 10:19 Сейчас в теме
Придумал!!! Вот, если кому надо.

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

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

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

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

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


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

ЗапросДанныхВсехОбъектовСразу
ТФ = Новый ТекстовыйДокумент;


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

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



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

Запрос = новый Запрос;
		
			Запрос.Текст = "ВЫБРАТЬ
			               |	ОТМКМ КАК КМ,
			               |	ОТМ.КТ КАК КТ,
			               |	ОТМ.ОТ КАК ОТ
			               |ИЗ
			               |	РегистрСведений.ОТМ КАК ОТМ";
			
			ТаблицаОТМ = Запрос.Выполнить().Выгрузить();
			
			Мас = Новый Массив;
			мас.Очистить();
			для каждого стр из ТаблицаОТМ цикл
				Мас.Добавить(Формат(стр.КМ, "ЧГ=0")+";"+Формат(стр.КТ, "ЧГ=0")+";"+формат(стр.ОТ, "ЧГ=0"));
			КонецЦикла;
			
 ФайлТЗ = Новый ЗаписьТекста;
 ФайлТЗ.УстановитьТекст(СтрСоединить(мас,Символы.ПС));
 ФайлТЗ.Записать(ИмяФайла,"CESU-8");
Показать



Вот только смущает, нет ли ограничение на длину полученной строки с помощью СтрСоединить?
6. пользователь 30.12.22 10:27
Сообщение было скрыто модератором.
...
7. user1103189 30.12.22 10:31 Сейчас в теме
10. starik-2005 3033 30.12.22 12:44 Сейчас в теме
(5)
Мас = Новый Массив;
мас.Очистить();
для каждого стр из ТаблицаОТМ цикл
Мас.Добавить(Формат(стр.КМ, "ЧГ=0")+";"+Формат(стр.КТ, "ЧГ=0")+";"+формат(стр.ОТ, "ЧГ=0"));
КонецЦикла;
  Запись = Новый ЗаписьТекста(ИмяФайла, бла-бла-бла...);
  для каждого стр из ТаблицаОТМ цикл
    Запись.ЗаписатьСтроку(
        СтрШаблон("%1;%2;%3", Формат(стр.КМ, "ЧГ=0"), Формат(стр.КТ, "ЧГ=0"), формат(стр.ОТ, "ЧГ=0"))
      )
  КонецЦикла;
  Запись.Закрыть();
13. user1863362 30.12.22 15:18 Сейчас в теме
(10) Если вместо Формат использовать XMLСтрока, то будет еще быстрее
starik-2005; kuzev; +2 Ответить
14. starik-2005 3033 30.12.22 15:19 Сейчас в теме
(13) В (12) есть cf-ник - поэкспериментируйте.
15. starik-2005 3033 30.12.22 15:29 Сейчас в теме
(13) Попробовал с XMLСтрока:
Запись через запись текста: 1 802
Запись через XML: 1 805
Запись через запись текста: 1 806
Запись через XML: 1 816
Запись через запись текста: 1 803
Запись через XML: 1 835

Примерно то же самое и получилось. Запись текста чуть быстрее, остальное в пределах погрешности.
16. starik-2005 3033 30.12.22 15:32 Сейчас в теме
(13) Не, я не прав:
Запись через запись текста: 484
Запись через XML: 500
Запись через запись текста: 492
Запись через XML: 490
Убрал отладку еще. Так что полсекунды. Даже вот XML выиграла один раз ))))
19. user1103189 30.12.22 17:26 Сейчас в теме
(13) нужен csv с разделителями
22. user1863362 30.12.22 18:29 Сейчас в теме
(19) А что такое "csv с разделителями"?
24. starik-2005 3033 31.12.22 10:53 Сейчас в теме
(19) И? В (17) финальный вариант. Там аж два механизма потоковой выгрузки "CSV с разделителями", которые на 100к строк на моем ноуте делают это за полсекунды. Вы вообще результат-то смотрели? А ХМЛСтрока - она ровно то же делает, что и формат - "убирает" разделитель групп, только быстрее.
11. kuzev 47 30.12.22 13:46 Сейчас в теме
быстрее будет так:

ТекстПостроитель = Новый ЗаписьXML;
ТекстПостроитель.ОткрытьФайл(ИмяФайла, Кодировка);
Для Каждого Стр из ТЗ По  Цикл
    ТекстПостроитель.ЗаписатьБезОбработки(<строка> + Символы.ПС);
КонецЦикла;
ТекстПостроитель.Закрыть();
12. starik-2005 3033 30.12.22 15:09 Сейчас в теме
(11)
быстрее будет так:
Проверил на 100к строках код из (10) и Ваш:
Запись через запись текста: 1 815 мс
Запись через XML: 1 820 мс
Запись через запись текста: 1 819 мс
Запись через XML: 1 831 мс
Запись через запись текста: 1 798 мс
Запись через XML: 1 817 мс
Ну не сказать, что запись текста сильно быстрее, но быстрее. Во вложении cf, погоняйте у себя.
ЗЫ: 22-я платформа. Учебная. Только что скачал и поставил. Проц - рязань 5500U, ОС венда 11.
ЗЫЗЫ: забыл в Вашем варианте прибавить ПС. С ним, полагаю, еще дольше будет.
Прикрепленные файлы:
1Cv8.cf
20. user1103189 30.12.22 17:27 Сейчас в теме
(11) спасибо, но нужен csv сразделителями
17. starik-2005 3033 30.12.22 15:35 Сейчас в теме
В общем с XMLСтрока и ЗаписьТекста полсекунды на 100к строк.
Запись через запись текста: 500
Запись через XML: 487
Запись через запись текста: 485
Запись через XML: 483
Запись через запись текста: 499
Запись через XML: 487
Без отладчика в общем-то пофиг, что юзать: запись текста или XML.
Прикрепленные файлы:
1Cv8.cf
18. SlavaKron 30.12.22 17:02 Сейчас в теме
(17) И давно XMLСтрока доступна в тонком клиенте?
21. user1863362 30.12.22 18:29 Сейчас в теме
(18)
И давно
Одновременно с таблицей значений и запросами.
И, специально для редкостных душнил, одновременно с записью текста в веб клиенте.
23. SlavaKron 30.12.22 19:40 Сейчас в теме
(21) Попробуйте перечитать мой вопрос, не считая его издевкой. Я не знал, что метод XMLСтрока доступен на тонком клиенте (а он доступен, вопреки СП), вот и спросил всегда ли было так.
25. spacecraft 31.12.22 12:52 Сейчас в теме
(23)
XMLСтрока доступен на тонком клиенте (а он доступен, вопреки СП)

Он доступен с большими ограничениями. Примитивные типы поддерживает. А вот ссылочные уже нет.
Может по этому в СП и не указан тонкий клиент.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)