使用微软的msxml3.dll,DOM: 文档对象模型编辑一个特大xml文件(超过100M),在处理完成后为了继续编辑其他xml文件,得释放占用的内存,老是释放不掉,除非程序退出。请教高手该怎么处理呢?以下是我的程序:#include <tchar.h>
#import "msxml3.dll"
using namespace MSXML2;int main()
{
IXMLDOMDocumentPtr docPtr;
HRESULT hr=CoInitialize(NULL);
if(hr<0)
{
cout<<"initialize failed"<<endl;
return -1;
}
hr=docPtr.CreateInstance("msxml2.domdocument");
_variant_t varXml("C:\\BigFile.xml");
_variant_t varOut((bool)TRUE);
varOut = docPtr->load(varXml);//内存使用100多兆!!
if((bool)varOut)
{
cout<<"load ok"<<endl;
}
else
{
cout<<"load faild"<<endl;
}
docPtr->Release();//内存占用没变化,还是100多兆。
docPtr.Detach();//也没变化 CoUninitialize();//减小了一点点,不过还是100多兆。return 0;
}
//程序退出后,才终于释放了100多兆内存,天啦!
#import "msxml3.dll"
using namespace MSXML2;int main()
{
IXMLDOMDocumentPtr docPtr;
HRESULT hr=CoInitialize(NULL);
if(hr<0)
{
cout<<"initialize failed"<<endl;
return -1;
}
hr=docPtr.CreateInstance("msxml2.domdocument");
_variant_t varXml("C:\\BigFile.xml");
_variant_t varOut((bool)TRUE);
varOut = docPtr->load(varXml);//内存使用100多兆!!
if((bool)varOut)
{
cout<<"load ok"<<endl;
}
else
{
cout<<"load faild"<<endl;
}
docPtr->Release();//内存占用没变化,还是100多兆。
docPtr.Detach();//也没变化 CoUninitialize();//减小了一点点,不过还是100多兆。return 0;
}
//程序退出后,才终于释放了100多兆内存,天啦!
>默认XMLDOM是异步操作的,切换到同步模式看看
同步模式是怎么回事呢?
docPtr.Release();
或者
docPtr = NULL;
是将docPtr销毁,应该会释放内存的呀。你们试过没有?