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]

Reply via email to