AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.03.2006, 09:27   #1  
Smith is offline
Smith
Участник
 
76 / 10 (1) +
Регистрация: 02.09.2004
нехватает памяти для xml
Доброе утро.

Формирую в аксапте xml-файл больших размеров. На каком-то этапе, когда используемая память компьютера раза в 3-4 превосходит объем оперативки, происходит сбой, и через некоторое время аксапта выплевывает ошибку, общий смысл которой сводится к нехватке памяти.

Можно обойти?
Старый 29.03.2006, 11:16   #2  
LiSA is offline
LiSA
Участник
 
19 / 10 (1) +
Регистрация: 28.03.2006
Цитата:
Сообщение от Smith
аксапта выплевывает ошибку, общий смысл которой сводится к нехватке памяти.
Попробуй увеличить размер виртуальной памяти...
Старый 29.03.2006, 11:33   #3  
Smith is offline
Smith
Участник
 
76 / 10 (1) +
Регистрация: 02.09.2004
там нереально придется увеличивать
Я даже 5% от файла не смог выгрузить.

Может можно как-то "на лету" писать в xml-файл, а не ждать пока он полностью сформируется (в оперативке похоже) и потом одним махом запишется на диск конструкцией xmlDocument.save(fileName);
?
Старый 29.03.2006, 12:06   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от Smith
Может можно как-то "на лету" писать в xml-файл, а не ждать пока он полностью сформируется (в оперативке похоже) и потом одним махом запишется на диск конструкцией xmlDocument.save(fileName);
У меня была несколько похожая проблема: при росте размера файла падала производительность. Я решил это так: ввел некий порог, условие на максимальное количество узлов/записей, и каждый раз по достижении порога открывал новый документ. Потом подвергал документы один за другим некоему преобразованию XSL, чтобы скорректировать структуру документа, а затем дописывал в файл строку xmlDocument.xml() средствами Аксапта (класс AsciiIO).

Еще вариант без XSL: работайте с отдельными документами как описано выше, извлекайте текст отдельных "веток" методом XMLNode.xml(), а "конверт" и заголовок XML-файла запрограммируйте вручную. Записывайте результат на диск с помощью AsciiIO.
Старый 29.03.2006, 17:18   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
может просто через AsciiIo его писать?
Старый 30.03.2006, 17:51   #6  
Smith is offline
Smith
Участник
 
76 / 10 (1) +
Регистрация: 02.09.2004
фуф, совсем зарылся я с этими классами... xmlNode, XmlNodeList и иже с ними. А время идет..
EVGL, может объясните на примере как "прокрутить" xmlDocument от начала до конца, вытащив при этом все его узлы/записи? У меня как-то не получается в цикл все это загнать, не знаю чем оперировать
Старый 30.03.2006, 18:17   #7  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Объяснять неохота, существует масса вариантов, но вот Вам пример рекурсивного кода, который ищет узел с заданным именем сквозь весь документ:
PHP код:
public XMLNode getXMLNodeByTagName(XMLNode _parentNodestr _tagName)
{
    
XMLNode     xmlNode;
    
XMLNode     recursiveNode;
    
XMLNodeList xmlNodeList;
    
int         i;
    ;
    if (!
_parentNode)
        return 
null;

    if (
_parentNode.nodeName() == _tagName)
        return 
_parentNode;

    if (
_parentNode && _parentNode.hasChildNodes())
    {
        
xmlNodeList _parentNode.childNodes();

        for (
i=0i<xmlNodeList.length(); i++)
        {
            
xmlNode     xmlNodeList.item(i);
            if (
xmlNode.nodeName() == _tagName)
                return 
xmlNode;
            
recursiveNode this.getXMLNodeByTagName(xmlNode_tagName);
            if (
recursiveNode)
                return 
recursiveNode;
        }
    }
    return 
null;

Запускается вся процедура так:
xmlNode = docType.getXMLNodeByTagName(inputDocument.root(), _tagName);
Старый 31.03.2006, 14:32   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а это не эквивалентно _parentNode.selectSingleNode('////'+_tagName)?

еще вот попалось: Global::recordFromXMLNode - там цикл при помощи nextSibling
Старый 31.03.2006, 16:37   #9  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Главная проблемма в том что используется технология обработки DOM, при этом в памяти формируется ПОЛНАЯ объектная модель XML документа и если он большой, то никакой памяти не хватит!
Для чтения лучше использовать SAX технологию, а для записи asciiIO
я по-моему где-то на форуме выкладывал проектик-пример работы с XML документами с использованием SAX технологии
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 31.03.2006, 16:42   #10  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Esli XML doc ne slozhnij - prosche bed' samomu ego sozdavat.. a ne cherez XML wraper.. proizvoditelnost'/resursi dumaju raz v 100 vozrastet...

PS: XML eto ved' COM!..
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dax-lessons: Generate XML Documentation Files for a project - DAX 2009 Blog bot DAX Blogs 0 08.08.2008 19:06
axStart: How to use XSLT in AIF and what’s wrong with empty xml Nodes. Blog bot DAX Blogs 0 27.04.2008 18:07
Inside Dynamics AX 4.0: The XML Structure Blog bot DAX Blogs 0 04.10.2007 11:20
Inside Dynamics AX 4.0: XML Document Integration Blog bot DAX Blogs 0 04.10.2007 11:20
casperkamal: Data XML Generation Wizard - Version 2.0 For Dynamics Ax Blog bot DAX Blogs 0 04.03.2007 23:04

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:30.