Проблемы с обработкой памяти с помощью MSXML

У меня есть приложение для тестирования готовых продуктов с использованием устаревшего кода в dll. Приложение может быть настроено для различных продуктов. Настройка выполняется через xml-файлы и может (и будет) изменена во время выполнения, т.е. в End-Of-Lot. Обработка xml выполняется упомянутой устаревшей dll.

После работы в течение более длительного времени (от дней до недель) я заметил увеличение объема памяти. Отладив это, я смог отследить (возможную) утечку в dll. Получив источник, я мог продолжить расследование, пока не нашел что-то вроде этого:

CAObjHandle doc;
MSXML6_NewDOMDocument40IXMLDOMDocument2(0, 0, LOCALE_NEUTRAL, 0, &doc);
[...]
MSXML6_IXMLDOMDocument2load(doc, 0, vtPath, &success);

Мне кажется, это каждый раз вызывается, начинается новый лот. И именно эта структура doc, кажется, находится в памяти. Я не нахожу места, где он свободен.

Ведь в dll было много мелких утечек, все из-за не освобожденных объектов (CVI-функций). Я исправил их, но я не знаю, как освободить эти MS-Objects. Я наткнулся на это: Понимание механизма сборки мусора MSXML, но после того, как я получил код ANSI-C, Я не уверен, что делать с GC и работает он или нет.

Есть ли способ освободить MSXML-объекты вручную?


person Oliver    schedule 13.05.2013    source источник


Ответы (1)


Хорошо, нашел ответ. Объект MSXML6_* может быть освобожден с помощью CA_DiscardObjHandle().

person Oliver    schedule 16.05.2013