Здравствуйте! Если я пишу данные и ТаблицыЗначений в 34 текстовых файла по 2Мб, то это занимает чуть меньше 3-х минут, а если пишу 6 Мб в один текстовый файл, то это занимает 48 минут. Но ведь должно быть наоборот. пишу черед ТекстовыйДокумент. Можете подсказать как ускорить? Были мысли сделать выгрузку через ЗначениеВСтрокуВнутр и удалить оттуда все лишнее, но ведь у даже у "бесконечной" строки, вроде, тоже есть ограничения.
Для каждого ТекущийОбъект из СписокОбъектов цикл
ТЗ = ЗапросДанныхТекущегоОбъекта.Выгрузить()
ТФ = Новый ТекстовыйДокумент;
для каждого стр из ТЗ цикл
ТФ.ДобавитьСтроку(ВсеПоляТзВОднуСтроку)
КонецЦикла
ТФ.Записать(ИмяФайла)
КонецЦикла
Показать
// 2. Запись всех данных в один файл, т.е. то что было долго
ЗапросДанныхВсехОбъектовСразу
ТФ = Новый ТекстовыйДокумент;
Для каждого стз из ТЗ Цикл
ТФ.ДобавитьСтроку(ВсеПоляТзВОднуСтроку)
КонецЦикла
ТФ.Записать(ИмяФайла)
//3. Стало и занимает 30 секунд
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОТМКМ КАК КМ,
| ОТМ.КТ КАК КТ,
| ОТМ.ОТ КАК ОТ
|ИЗ
| РегистрСведений.ОТМ КАК ОТМ";
ТаблицаОТМ = Запрос.Выполнить().Выгрузить();
Мас = Новый Массив;
мас.Очистить();
для каждого стр из ТаблицаОТМ цикл
Мас.Добавить(Формат(стр.КМ, "ЧГ=0")+";"+Формат(стр.КТ, "ЧГ=0")+";"+формат(стр.ОТ, "ЧГ=0"));
КонецЦикла;
ФайлТЗ = Новый ЗаписьТекста;
ФайлТЗ.УстановитьТекст(СтрСоединить(мас,Символы.ПС));
ФайлТЗ.Записать(ИмяФайла,"CESU-8");
Показать
Вот только смущает, нет ли ограничение на длину полученной строки с помощью СтрСоединить?
Мас = Новый Массив;
мас.Очистить();
для каждого стр из ТаблицаОТМ цикл
Мас.Добавить(Формат(стр.КМ, "ЧГ=0")+";"+Формат(стр.КТ, "ЧГ=0")+";"+формат(стр.ОТ, "ЧГ=0"));
КонецЦикла;
Запись = Новый ЗаписьТекста(ИмяФайла, бла-бла-бла...);
для каждого стр из ТаблицаОТМ цикл
Запись.ЗаписатьСтроку(
СтрШаблон("%1;%2;%3", Формат(стр.КМ, "ЧГ=0"), Формат(стр.КТ, "ЧГ=0"), формат(стр.ОТ, "ЧГ=0"))
)
КонецЦикла;
Запись.Закрыть();
Запись через запись текста: 1 802
Запись через XML: 1 805
Запись через запись текста: 1 806
Запись через XML: 1 816
Запись через запись текста: 1 803
Запись через XML: 1 835
Примерно то же самое и получилось. Запись текста чуть быстрее, остальное в пределах погрешности.
(19) И? В (17) финальный вариант. Там аж два механизма потоковой выгрузки "CSV с разделителями", которые на 100к строк на моем ноуте делают это за полсекунды. Вы вообще результат-то смотрели? А ХМЛСтрока - она ровно то же делает, что и формат - "убирает" разделитель групп, только быстрее.
ТекстПостроитель = Новый ЗаписьXML;
ТекстПостроитель.ОткрытьФайл(ИмяФайла, Кодировка);
Для Каждого Стр из ТЗ По Цикл
ТекстПостроитель.ЗаписатьБезОбработки(<строка> + Символы.ПС);
КонецЦикла;
ТекстПостроитель.Закрыть();
Запись через запись текста: 1 815 мс
Запись через XML: 1 820 мс
Запись через запись текста: 1 819 мс
Запись через XML: 1 831 мс
Запись через запись текста: 1 798 мс
Запись через XML: 1 817 мс
Ну не сказать, что запись текста сильно быстрее, но быстрее. Во вложении cf, погоняйте у себя.
ЗЫ: 22-я платформа. Учебная. Только что скачал и поставил. Проц - рязань 5500U, ОС венда 11.
ЗЫЗЫ: забыл в Вашем варианте прибавить ПС. С ним, полагаю, еще дольше будет.
В общем с XMLСтрока и ЗаписьТекста полсекунды на 100к строк.
Запись через запись текста: 500
Запись через XML: 487
Запись через запись текста: 485
Запись через XML: 483
Запись через запись текста: 499
Запись через XML: 487
Без отладчика в общем-то пофиг, что юзать: запись текста или XML.
(21) Попробуйте перечитать мой вопрос, не считая его издевкой. Я не знал, что метод XMLСтрока доступен на тонком клиенте (а он доступен, вопреки СП), вот и спросил всегда ли было так.