Re: xmldoc() takes ages
| From: | Walt Boring | Date: | Thu, 01 May 2003 23:37:45 +0000 |
| Subject: | Re: xmldoc() takes ages | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-1145@lists.php.net to get a copy of this message | ||
BTW tst.xml and foo_3.xml are the same file.
Walt
On Thu, 2003-05-01 at 16:31, Walt Boring wrote:
> Howdy,
> I have a 12Meg xml file that I am trying to get PHP 4.3.1 to parse
> using libxml2 with xmldoc(), and it takes ~ 11 minutes to do this on a
> P4 1.8Hhz box.
>
> The same operation in libxml2's python interface takes 6 seconds.
>
> here is my code. Any ideas why it takes 11 minutes? 12Megs of valid
> xml is large, but not 11 minutes worth of large.
>
> <?php
>
> //my includes here
> set_time_limit( 345600 );
>
> $xml = implode('', file("foo_3.xml"));
> debug_message("parsing xml file of len = ".strlen($xml));
>
> $doc = xmldoc( $xml );
> //it takes 11 minutes to get here!
> debug_message("GOT THE DOC");
> exit;
>
> ?>
>
> The output
> [waboring@hemna bin]$ time php -f xml.php
> PHP Notice:
> DEBUG:(16:04:00):/home/waboring/devel/freemap/bin/xml.php::(11) parsing
> xml file of len = 11223576
> in /home/waboring/devel/freemap/lib/util.inc on line 784
> PHP Notice:
> DEBUG:(16:13:55):/home/waboring/devel/freemap/bin/xml.php::(16) GOT THE
> DOC
> in /home/waboring/devel/freemap/lib/util.inc on line 784
> <div style="float: left;"> TOTAL EXECUTION TIME: 595.5</div>
>
> real 9m56.163s
> user 8m57.790s
> sys 0m4.280s
>
>
>
> python tst.py that comes with libxml2-python package.
>
>
> #!/usr/bin/python -u
> import sys
> import libxml2
>
> # Memory debug specific
> libxml2.debugMemory(1)
>
> doc = libxml2.parseFile("tst.xml")
> if doc.name != "tst.xml":
> print "doc.name failed"
> sys.exit(1)
> root = doc.children
> print "doc.name = "+root.name
>
> #if root.name != "doc":
> # print "root.name failed"
> # sys.exit(1)
> child = root.children
> #if child.name != "foo":
> # print "child.name failed"
> # sys.exit(1)
> doc.freeDoc()
>
> # Memory debug specific
> libxml2.cleanupParser()
> if libxml2.debugMemory(1) == 0:
> print "OK"
> else:
> print "Memory leak %d bytes" % (libxml2.debugMemory(1))
> libxml2.dumpMemory()
>
> output of
> [waboring@hemna bin]$ time ./tst.py
> doc.name = MAP
> OK
>
> real 0m3.413s
> user 0m2.860s
> sys 0m0.390s
>
> Ok, so I'm not 100% sure that the python libxml2.parseFile() does
> EXACTLY the same php's xmldoc(), but I don't think xmldoc() should take
> 11 minutes. It also sucks up a ton of ram.
>
> Walt
>