W nadziei, że staram się uniknąć przyszłych wycieków pamięci w programach php (moduły drupal itp.), Mam do czynienia z prostymi skryptami php, które przeciekają pamięć.Dlaczego ten prosty skrypt php powoduje wyciek pamięci?
Czy ekspert php może mi pomóc znaleźć informacje na temat tego skryptu, które powoduje, że zużycie pamięci stale rośnie?
Spróbuj uruchomić samodzielnie, zmieniając różne parametry. Wyniki są interesujące. Oto ona:
<?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();
Dla mnie wyjście jest:
current memory usage: 73308
current memory usage: 74996
current memory usage: 506676
[edytowane na wyłączony większej liczby członków Object]
Chciałbym spróbować usunąć linie w pętli for na raz, aby wyizolować problem. –