ПредишенСледващото

Както синтактична XML документ чрез XDTO без промени в конфигурацията, без данни XML-схема, а не е с грешка "не е достатъчно памет." Особено ви документ XML трябва да се счита за еднократна такса.

След като овладял една проста последователност от XML четене, четене за един XML файл, не прибягват до някакъв друг начин, преди, докато не срещнах задачата за изтегляне на данни от "Mad" файла.

ИТС: Оптимизиране на използването на RAM.
Недопустимо е да се справят с големи XML документи с помощта на вградения в езикови обекти за преработка на целия файл: текстови документи в TextDocument, XML и HTML в DokumentDOM в DokumentHTML, и да се създаде памет пакети на XDTO размер с всички XML-файла като цяло.

В противен случай, цялата преписка се зарежда в паметта в своята цялост. Изключенията са изолирани случаи, когато това се изисква произволен достъп до съдържанието на файла в една определена част от него.

Необходимо е да се използват съоръженията за пореден запис и последователно да се чете: ChtenieXML, TextReader, ZapisXML, TextWriter, с които можете да прочетете части от даден файл и отпадъци памет пестеливо.

При използване на механизми XDTO неправилно четат в паметта на всички XML-файла като цяло (FabrikaXTDO.ProchitatXML (ChtenieXML)). Вместо това, трябва да прочетете XML файл се използват последователно ChtenieXML обект, както и неговите фрагменти (тагове) deserializovyvat използване XDTO фабрика.

Харесва ми вече разчита на файла до 300 MB, със сигурност усеща стандартната 1C-нещо "не е достатъчно памет" и излиза. Убеден, на практика, че XDTO набута цялата преписка не е добро. Но да се върнем към цитат от ИТС и, тъй като той е част от отговора, какво да правя и как. И тук аз не съм намерил истински пример, че ще бъде лесно, без XDTO опаковки, XML-схеми и в същото време отговарят на изискванията на 1C от гледна точка на оптимизиране на използването на паметта. И аз трябваше да мисля малко и това е, което излезе от него:

В този пример, документът за XML започва да разбира обичайната четене, докато достигне до желаното място. Този възел е само желания обект, в този случай номенклатура (наричана по-нататък "оферта" в XML-файл) и след това файлът е вече обигран възлите един след друг. Едно от предложенията след друг. Всеки от предложенията получавам отделни данни, отнасящи се конкретно до обекта (доставка). Скоростта на 29 000 оферти (и едно предложение съдържа куп подробности и свойства на някои от тях могат да се видят в първия скрийншот) до посредствен лаптоп са демонтирани за 1.5 минути.

В прикачения файл са: Лечение - пример за четене на данни от по-горе алгоритъм, както и пример за XML файл, съдържащ 10-те позиции, за да можете да тествате този процес, както и да изглежда по-подробно на всички в дебъгер. Обработка е написана под платформата 8.2 за конвенционалните форми.

Може да почувствате, че е извращение, може би не. Моля, оставете вашето мнение, може да е интересно да се знае по този начин е възможно да се премине към друга.

Подкрепете проекта - споделете линка, благодаря!