Bug #14263 Updated: Don't free each allocation in cgimode
| From: | derick@php.net | 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