|
30.09.2016, 12:59 | #1 |
Участник
|
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'); } Как заставить XmlDocument освободить память? Последний раз редактировалось mayk; 30.09.2016 в 13:02. |
|
30.09.2016, 14:40 | #2 |
Участник
|
Для очищения памяти и сборки мусора, после завершения работы с XMLDocument попробуйте написать следующее -
X++: doc = null;
System.GC::Collect();
System.GC::WaitForPendingFinalizers();
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|