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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.09.2016, 12:59   #1  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
XMLDocument и утечка памяти
Кто-нибудь сталкивался с тем, что использование XmlDocument'а (в AX4) для создания файлов в XML приводит к утечке памяти? То есть запускаешь выгрузку пару раз - нормально, только видно в task manager'е память растёт и не освобождается. Делаешь ещё пару раз - и System.OutOfMemoryException.

Есть способ победить без переезда на другие способы создания Xml типа XmlWriter'ы?

Пример джобика который симулирует ситуацию.
X++:
static void XmlDocTest(Args _args)
{
    int i = 1000;
    void run()
    {
        XmlDocument doc = XmlDocument::newBlank();
        XmlNode nodeRoot;
        XmlNode n1, n2, n3;
        XmlAttribute attr;
        int lotsOfLines = 10000;
        ;
        nodeRoot = doc.appendChild(doc.createElement("Root"));
        n1 = doc.createElement("Hello");
        nodeRoot.appendChild(n1);
        while (lotsOfLines > 0)
        {
            nodeRoot.appendChild(n1);
            n1.appendChild(doc.createElement("Darkness"));
            n2 = doc.createElement("My");
            nodeRoot.appendChild(n2);
            n3 = doc.createElement("Friend");
            n2.appendChild(n3);

            attr = doc.createAttribute("age");
            attr.value("Old");

            n3.attributes().setNamedItem(attr);
            lotsOfLines -= 1;
        }
        doc.save(@"C:\temp\test.xml");
        //System.GC::Collect(); //не помогает

    }
    while (i >= 0)
    {
        run();
        i -= 1;
    }
    info('ok');
}
Он создаст файл пару раз, но потом свалится с "Exception of type 'System.OutOfMemoryException' was thrown."

Как заставить XmlDocument освободить память?

Последний раз редактировалось mayk; 30.09.2016 в 13:02.
Старый 30.09.2016, 14:40   #2  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Для очищения памяти и сборки мусора, после завершения работы с XMLDocument попробуйте написать следующее -
X++:
    doc = null;
    System.GC::Collect();
    System.GC::WaitForPendingFinalizers();
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
XMLDocument недостаточно памяти для исполнения кода Murlin DAX: Программирование 2 03.02.2014 09:21
Утечка памяти при вызове orig() gb20 DAX: Программирование 3 11.12.2009 12:11
При использовании SetTimeOut() происходит утечка памяти Jox DAX: Программирование 2 21.07.2006 10:56
Утечка памяти? Почему? Ax3 sp 4 lagr221374 DAX: Программирование 17 15.03.2006 18:23
утечка памяти в аксапта jekill DAX: Администрирование 69 07.03.2006 10:25

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

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

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