Bug #14263 Updated: Don't free each allocation in cgimode

From: Date: Wed, 28 Nov 2001 09:01:42 +0000
Subject: Bug #14263 Updated: Don't free each allocation in cgimode
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-71889@lists.php.net to get a copy of this message
ID: 14263 Updated by: derick Reported By: samjam@php.net Status: Open Old Bug Type: Performance problem Bug Type: Feature/Change Request Operating System: all PHP Version: 4.0.6 New Comment: Making it a feature request, as it's not a "bug". Previous Comments: ------------------------------------------------------------------------ [2001-11-28 04:00:08] samjam@php.net If compiled in standalone cgi mode, when the script exits, php only needs to free resources, not other arrays or strings or items (unless we ever support object destructors). It can take a LONG time to free a hundred thousand or so elements in nested arrays, 4 or 5 times longer than it takes to create then. See these threads in phpdev mailing list: Re: [PHP-DEV] maybe serious error in RC3 memory manager RE: [PHP-DEV] CGI quick cleanup Sample code: Note how long it takes to exit after finishing. #! /usr/bin/php -q <?php ini_Set("max_execution_time","0"); ini_Set("memory_limit","500M"); class thingy { function thingy($c) { if ($c>0) $this->ref=&new thingy($c-1); } } $stash=array(); $max=500000; $start=time(); for($i=0;$i<$max;$i++) { $r=rand(0,300); $stash[$r][]=&new thingy(rand(0,10)); echo "\rUse: ".floor($i/$max*100)."% "; } echo "\n"; $mid=time(); $max=count($stash); $c=0; foreach(array_keys($stash) as $key) { unset($stash[$key]); $c++; echo "\rFree: ".floor($c/$max*100)."% "; } unset($stash); echo "\n"; $done=time(); print "Use: ".($mid-$start)."\n"; print "Free: ".($done-$mid)."\n"; ?> ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=14263&edit=1

« previous php.dev (#71889) next »