Re: Re: drastic memory consumption with a sequenceof exceptions
| From: | Andi Gutmans | Date: | Wed, 10 Aug 2005 14:08:39 +0000 |
| Subject: | Re: Re: drastic memory consumption with a sequenceof exceptions | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-17787@lists.php.net to get a copy of this message | ||
Hi Ron,
Indeed exception may lead to leaks in certain cases. We do try and cleanup as much as possible but the situation you describe is hard to detect. I will however put it on our TODO list because this case could possibly be improved on.
Andi
At 11:54 AM 8/10/2005 +0200, Ron Korving wrote:
You're right, using that file to create a big piece of data was just for demonstration purposes. In my personal case it's XML parsing. The way I read what you just said is that this is behavior by design. But if I don't throw Exceptions, memory usage stays constant. Throwing and catching these exceptions are the exception-to-the-rule. Nonetheless, if this is truly by design.. maybe that's something to look into for PHP6. Ron "Marcus Boerger" <helly@php.net> schreef in bericht news:124244453.20050810114522@marcus-boerger.de... Hello Ron, Wednesday, August 10, 2005, 8:47:25 AM, you wrote:Okay Andi, the script in this message is as simple as it gets. I used a syslog file to create a load of data in this case, but of course you canuseany (text) file for this.#!/usr/bin/php5 <? function process() {$data = file("/var/log/syslog.0");What makes you think the file would be closed. Erm the array deleted? And that is your problem you are unnecessarily reading all the file into an array. Try using the same with FileObject instead, which should reduce memory usage a lot: foreach(FileObject($file) as $data) throw new Exception("error"); But of course you only did that to demonstrate the memory problem which in fact simply means that we don't do a full stack cleanup like c++ would do here (php != c++). In php we do the cleanup at script termination. That is also the reason why php is not perfectly suitable for console apps especially when it comes to daemons. best regards marcus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.phpforeach ($data as $line) throw new Exception("error");