Con la esperanza de tratar de evitar futuras fugas de memoria en programas php (módulos drupal, etc.) he estado jugando con scripts php simples que pierden memoria.¿Por qué esta simple secuencia de comandos php pierde memoria?
¿Podría un experto en php ayudarme a encontrar qué pasa con este script que hace que el uso de la memoria suba continuamente?
Pruebe a ejecutarlo usted mismo, cambiando varios parámetros. Los resultados son interesantes Aquí está:
<?php
function memstat() {
print "current memory usage: ". memory_get_usage() . "\n";
}
function waste_lots_of_memory($iters) {
$i = 0;
$object = new StdClass;
for (;$i < $iters; $i++) {
$object->{"member_" . $i} = array("blah blah blha" => 12345);
$object->{"membersonly_" . $i} = new StdClass;
$object->{"onlymember"} = array("blah blah blha" => 12345);
}
unset($object);
}
function waste_a_little_less_memory($iters) {
$i = 0;
$object = new StdClass;
for (;$i < $iters; $i++) {
$object->{"member_" . $i} = array("blah blah blha" => 12345);
$object->{"membersonly_" . $i} = new StdClass;
$object->{"onlymember"} = array("blah blah blha" => 12345);
unset($object->{"membersonly_". $i});
unset($object->{"member_" . $i});
unset($object->{"onlymember"});
}
unset($object);
}
memstat();
waste_a_little_less_memory(1000000);
memstat();
waste_lots_of_memory(10000);
memstat();
Para mí, la salida es:
current memory usage: 73308
current memory usage: 74996
current memory usage: 506676
[editado a más miembros de objetos no se ha establecido]
Intentaré eliminar las líneas en el bucle for a la vez, para aislar el problema. –