Показать сообщение отдельно
Старый 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.