0

我有一个使用 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。我遇到了这个:了解 MSXML 垃圾收集机制,但是在我拥有 ANSI-C 代码之后,我不确定如何处理 GC 以及它是否有效。

有没有办法手动释放 MSXML 对象?

4

1 回答 1

0

好的,找到答案了。MSXML6_*可以使用 释放对象CA_DiscardObjHandle()

于 2013-05-16T10:34:59.900 回答