Dear Jason,
On 14 Nov 2003, Jason E. Stewart wrote:
> Apparently, one user indicated that if he turned validation off the
> memory leak went away. He was using a SAX2 parser, however. So please
> try this for your application and let us know if it helps.
Thanks a lot for your help. I tried turning validation off but the
memory leak still occurs. Attached please find two Perl scripts producing
the memory leak - one for XML parsing and one for pretty-printing
independently. The example XML I used is about 60k bytes. The variables
are local in the for-loop so I suppose it will be destroyed at the end of
the for-loop in each iteration.
The memory leak by mleak2.pl grow to >400M (500 iterations).
If I comment out the statement with $parser->adoptDocument, the memory
leak grow only to 35M.
Do I need to call some API to clean up after calling
XML::Xerces::AbstractDOMParser::adoptDocument() ?
The memory leak by mleak3.pl grow to about 150M (2500 iterations)
Hope this help. Thanks again.
--
Best Regards,
Chris Cheung
Center for Large-Scale Computation
Have a nice day!
#!/usr/bin/perl -w
use XML::Xerces;
my $xml;
{
open(F, "< example.xml") || die "Cannot open file.";
# setting the delimiter to undef to read the whole XML as a string.
$/=undef;
$xml = <F>;
}
for (my $i = 0; $i < 500; $i++)
{
my $parser = XML::Xerces::XercesDOMParser->new();
$parser->setDoNamespaces(1);
$parser->setValidationScheme(
$XML::Xerces::AbstractDOMParser::Val_Never);
$parser->parse(XML::Xerces::MemBufInputSource->new($xml));
# I used adoptDocument since I need to use the DOMDocument after
# the parser die.
# Do I need to call some clean-up API afterward?
my $doc = $parser->adoptDocument();
print "$i\n";
}
print "Test Ended\n";
sleep 100000;
#!/usr/bin/perl -w
use XML::Xerces;
my $parser = XML::Xerces::XercesDOMParser->new();
$parser->setDoNamespaces(1);
$parser->setValidationScheme(
$XML::Xerces::AbstractDOMParser::Val_Never);
$parser->parse("example.xml");
my $doc = $parser->adoptDocument();
for (my $i = 0; $i < 2500; $i++)
{
my $domImpl =
XML::Xerces::DOMImplementationRegistry::getDOMImplementation('LS');
my $writer = $domImpl->createDOMWriter();
if ($writer->canSetFeature('format-pretty-print',1))
{
$writer->setFeature('format-pretty-print',1);
}
my $target = XML::Xerces::MemBufFormatTarget->new();
$writer->writeNode($target, $doc);
my $prettyXML = $target->getRawBuffer();
print "$i\n";
}
print "Test Ended\n";
sleep 100000;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]