【发布时间】:2013-05-16 18:34:59
【问题描述】:
我有一个应用程序,用于使用 dll 中的一些遗留代码测试制造的产品。可以为不同的产品设置应用程序。设置是通过 xml 文件完成的,并且可以(并且将)在运行时更改,即在批次结束时。 xml 的处理由上述遗留 dll 完成。
运行较长时间(几天到几周)后,我注意到内存占用量增加了。对此进行调试,我可以追踪到 dll 的(可能的)泄漏。得到源之后,我可以进一步调查,直到我发现这样的东西:
CAObjHandle doc;
MSXML6_NewDOMDocument40IXMLDOMDocument2(0, 0, LOCALE_NEUTRAL, 0, &doc);
[...]
MSXML6_IXMLDOMDocument2load(doc, 0, vtPath, &success);
在我看来,每次都调用这个,开始一个新的批次。正是这个doc 结构,似乎驻留在内存中。我没有找到任何释放它的地方。
毕竟,该 dll 有很多小泄漏,全部来自未释放的对象(CVI 函数)。我修复了这些,但我不知道如何释放这个 MS-Objects。我遇到了这个:Understanding the MSXML garbage collection mechanism,但是在我有了 ANSI-C 代码之后,我不确定如何处理 GC 以及它是否有效。
有没有办法手动释放 MSXML 对象?
【问题讨论】: