我正在linux平台上使用xerces 2.8.0。对于每个xml文件(非常大的文件)的解析,我都能看到大量的内存增加。
下面是示例代码
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>
using namespace xercesc;
class ParseWrite
{
XercesDOMParser* parser;
DOMDocument * pDoc;
public:
ParseWrite()
{
try
{
XMLPlatformUtils::Initialize();
} catch(...)
{
}
parser = new XercesDOMParser();
parser->setValidationScheme(XercesDOMParser::Val_Never);
parser->setDoNamespaces(false);
parser->setDoSchema(false);
parser->setValidationSchemaFullChecking(false);
parser->setLoadExternalDTD(false);
pDoc = 0;
}
~ParseWrite()
{
delete parser;
XMLPlatformUtils::Terminate();
}
int Parse(const char * infile)
{
parser->parse(infile);
pDoc = parser->getDocument();
//Traversing code here
parser->resetDocumentPool();
return 0;
}
};
ParseWrite Parser;
int main(int argc,char** argv)
{
if(argc < 2)//check atleast 1 file is passed
return 0;
for(int i = 1; i < argc; i++)
{
Parser.Parse(argv[i]);
sleep(10);
somefun();
someotherfun();
}
//some other code blocks
return 0;
}
注意: 在每个文件解析后调用sleep()来检查是否释放了内存。是否可以在下一次解析开始之前释放内存?