Fish:
还是MSXML COM对象相关的内存泄漏问题,继续请教
[阅读: 822] 2006-02-20 01:28:48
程序更改后,用工具测试分析,测试报告说:在MSXML COM对象相关的部分
没有再检测到内存泄漏。但是,在实际使用中,仍可观察到内存在持续地增长,
只是没有以前那么明显,小额持续增加。
程序里,对于已经创建的 IXMLDOMDocument 对象以及 Element 等对象,
都使用了 Release() 来释放。但是似乎并没有完全释放掉。
代码片段分别如下:
创建时:
//得到关于IXMLDOMDocument 接口的指针XMLDOC
hr = CoCreateInstance( CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void **) &XMLDOC );
释放时:
XMLDOC->Release();
XMLDOC = NULL;
对于程序中间各 Node 的创建和释放也采取了上面类似的方法。
==========================================================
在网上搜索了一下,在某些论坛也见到有人问这些问题,好像尚未见到解答。
我用工具跟踪了一下,发现在针对该 XMLDOC 调用 Release() 的时候,
返回的引用计数并非为0。
IUnknown::Release () returns unsigned int:1
其他的也有类似的情况。
根据我对 COM 的理解,在调用 Release() 后,COM 对象引用计数减一,
只有为0时,才真正释放对象所占资源。这里是否意味着程序中的对象仍被引用,
从而导致内存并未被释放?
估计程序里对这些对象另有引用,需要仔细再看看。另外,怎对这种情况,
不知道强行再调用一次 Release() 是否有用,呵呵
其他诸如
大家都是出来卖的,何苦自己人为难自己人
那些活好的,或者活新的,或者花样多的,
或者老板拉皮条功夫好能拉到肯多花钱的客的,
拜托不要老是打击年老色衰的同行了
老鱼记事 老鱼侃棋 老鱼围脖