В настоящее время я борюсь с ростом использования памяти в Xerces-C.
Мне удалось упростить код до этой точки:
xercesc_3_2::XMLPlatformUtils::Initialize();
xercesc_3_2::DOMImplementation* impl = xercesc_3_2::DOMImplementationRegistry::getDOMImplementation((const XMLCh*)L"LS");
xercesc_3_2::DOMDocument* doc = impl->createDocument();
while (true)
{
xercesc_3_2::DOMElement* el = doc->createElement((const XMLCh*)L"root");
el->release();
}
Когда я выполняю этот код,использование памяти увеличится до 4 ГБ через ~ 30 секунд.
- Нужно ли мне вызывать что-либо еще, кроме
release()
на DOMElement
, чтобы освободить память? - Есть ли способ действительно освободить память, используемую
DOMElement
без освобождения DOMDocument
Некоторые замечания к моемувопросы:
- Я не могу уничтожить
DOMDocument
. (К сожалению, я должен держать это вокруг с большим количеством DOMElement
s, созданных и выпущенных) - Я знаю, что технически это не утечка памяти, так как память освободится, когда я выпущу
DOMDocument
, ноэто известная проблема? - Я тестировал версии xerces-c
3.1.1
, 3.1.4
. 3.2.2
. Проблема существует во всех этих версиях.