Кто-нибудь сталкивался с тем, что использование 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 освободить память?