Re: drastic memory consumption with a sequence of exceptions

From: Date: Tue, 09 Aug 2005 15:27:26 +0000
Subject: Re: drastic memory consumption with a sequence of exceptions
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-17700@lists.php.net to get a copy of this message
The problem occurs in this particular situation: public function process($data) { $largeResultSet = $this->xmlParser->parseString($data); foreach ($largeResultSet as &$item) { throw new Exception("error"); } } It only happens if the exception is thrown from within the foreach(). It seems the $largeResultSet is not freed in this case. Using the foreach by reference or not (&$item or $item) does not make a difference. Ron ""Ron Korving"" <r.korving@xit.nl> schreef in bericht news:21.AF.04646.20AC8F24@pb1.pair.com... > It is very likely that this has something to do with DOM. It's a huge piece > of code though, making it hard to test where the problem really lies. > > ""Ron Korving"" <r.korving@xit.nl> schreef in bericht > news:BD.4F.04646.AA6C8F24@pb1.pair.com... > > I've noticed that in a script of mine, memory consumption can explode > quite > > drastically when Exceptions are thrown, opposed to very normal memory > > consumption when exceptions are not thrown. > > > > This is the idea: > > > > <? > > class Obj > > { > > function process($i) > > { > > // do a lot of stuff, occupy a lot of memory within the scope of this > > function > > throw new Exception("error"); > > } > > } > > > > $obj = new Obj(); > > $errors = array(); > > > > for ($i=0; $i < 60; $i++) > > { > > try > > { > > $obj->process(); > > } > > catch (Exception $e) > > { > > $errors[] = $e->getMessage(); > > } > > } > > ?> > > > > When exceptions are not thrown, memory consumption is normal. The method's > > local vars are freed and not much more memory is used in the 50th pass > > compared to the 1st. But when exceptions are thrown, memory consumption > > increases quite a bit every pass. In the end (within the 60 passes of my > > loop) over 8 MB's are used. > > > > Of course, I can unset a lot of data before throwing exceptions to free up > > memory and the problem will be solved. But it would be nicer if the > cleanup > > would happen as an exception is thrown. > > > > Can this be considered a bug or is this behavior known and accepted? > > > > Ron

« previous php.internals (#17700) next »