2013-05-13 3 views
0

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

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

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

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

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

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

ответ

0

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

Смежные вопросы