0
timurhv
18.10.19
✎
14:27
|
Выгружаю большие объемы при переносе из 7.7 в 8 (типовые правила КД2), столкнулся с ограничением памяти.
Exe пропатчил до 3.5Гб, но все-равно даже с маленькими порциями упираюсь в ограничение размера XML при записи штатными средствами.
Решил использовать потоковую запись через Scripting.FileSystemObject без хранения файла в оперативной, но при записи текста XML библиотека падает с ошибкой. Я так понимаю, какие-то символы не могут быть преобразованы в нужную кодировку.
FSO = СоздатьОбъект("Scripting.FileSystemObject");
ХМЛФайл = FSO.CreateTextFile(ИмяФайлаДанных, 1, 1);
ХМЛФайл.WriteLine("123"); // ок
ХМЛФайл.WriteLine(XML_текст); // ошибка dll
ХМЛФайл.Close();
Сам файл в этот момент создается в кодировке UTF-16, тестировал на виртуальной ХР и 7 - тоже самое.
Хотел проверить как работает ADODB.Stream с методом WriteText, указал кодировку при создании UTF-8, но также падает на записи текста XML.
Кто-нибудь сталкивался с данной ошибкой?
|
|
1
trad
18.10.19
✎
14:43
|
77 по ком не может передавать, в качестве параметров, и принимать, в качестве результатов, длинные строки
Килобайт 700 или такого порядка, точно не помню
Разбей XML_текст на куски
|
|
3
timurhv
19.10.19
✎
03:16
|
(1) Проверил, работает, огромное спасибо!
Ограничение было на 500кб, но если через помощник перехода на новую редакцию зарплаты запускать - снова падало, выставил 100кб. Для истории и быстрого поиска:
Вместо
ХМЛФайл.WriteLine(XMLТекст);
Пишем
ДлинаСтроки = СтрДлина(XMLТекст);
ОграничениеСтроки = 102400; // 100кб
Если ДлинаСтроки > ОграничениеСтроки Тогда
Для Инд = 1 По (Цел(ДлинаСтроки / ОграничениеСтроки) + 1) Цикл
Если ((Инд-1)*ОграничениеСтроки+1) >= ДлинаСтроки Тогда
Продолжить;
КонецЕсли;
ХМЛФайл.Write(Сред(XMLТекст, ((Инд-1)*ОграничениеСтроки+1),ОграничениеСтроки));
КонецЦикла;
Иначе
ХМЛФайл.WriteLine(XMLТекст);
КонецЕсли;
|
|