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

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

Если сообразите (и вообще знаете что это такое), то используйте Потоковый вывод!
в разы ускоряет вывод данных!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Sashares 33 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 5 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 3165 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 3165 30.12.22 15:19 Сейчас в теме
(13) В (12) есть cf-ник - поэкспериментируйте.
15. starik-2005 3165 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 3165 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 3165 31.12.22 10:53 Сейчас в теме
(19) И? В (17) финальный вариант. Там аж два механизма потоковой выгрузки "CSV с разделителями", которые на 100к строк на моем ноуте делают это за полсекунды. Вы вообще результат-то смотрели? А ХМЛСтрока - она ровно то же делает, что и формат - "убирает" разделитель групп, только быстрее.
11. kuzev 48 30.12.22 13:46 Сейчас в теме
быстрее будет так:

ТекстПостроитель = Новый ЗаписьXML;
ТекстПостроитель.ОткрытьФайл(ИмяФайла, Кодировка);
Для Каждого Стр из ТЗ По  Цикл
    ТекстПостроитель.ЗаписатьБезОбработки(<строка> + Символы.ПС);
КонецЦикла;
ТекстПостроитель.Закрыть();
12. starik-2005 3165 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 3165 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Строка доступен на тонком клиенте (а он доступен, вопреки СП)

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот