Temat: Czyszczenie pamięci - Obiekty, funkcje
Dzieki.
Wyglada na to ze pamiec jaka zostala wykozystana dla metody zwalnia się ale nie dokonca co sugeruje roznica miedzy:
" przed wywołaniem metody 10585880" a "po wywołaniu metody 10650420"
W celu calkowitego wyeliminowania zuzycia pamieci wymusilem unset na zmiennej $c co w teori powinno przywrocic stan pamieci do "przed zadeklarowaniem klasy", lecz wynik jest nie taki jak sądziłem:
<?php
class test {
private $a = array();
public function __construct() {
$this->a = range(1, 100000);
}
public function metoda() {
$b = range(100000, 300000);
//echo "\t - w trakcie wywołania metody ".memory_get_usage()."\n";
}
}
//echo "\t - przed zainicjowaniem klasy ".memory_get_usage()."\n";
$c = new test();
//echo "\t - przed wywołaniem metody ".memory_get_usage()."\n";
$c->metoda();
unset($c);
echo "\t - po wywołaniu metdoy ".memory_get_usage()."\n";
?>
- przed zainicjowaniem klasy 64264
- przed wywołaniem metody 10589940
- w trakcie wywołania metody 31640056
- po wywołaniu metdoy 129100
Wyglada na to, ze czyszczona jest pamiec wykozystana na zainicjowanie obiektu, ale tylko czesciowo, gdyz zostaja jakies smieci
Karol Nowacki:
to chyba rozwieje wątpliwości:[kajoj@shellcode ~]$ cat test2.php
<?php[/quote]> echo "Zamowana pamięć:\n";[quote]echo "\t - przed zadeklarowaniem klasy ".memory_get_usage()."\n";
class test {
private $a = array();
public function __construct() {
$this->a = range(1, 100000);
}
public function metoda() {
$b = range(100000, 300000);
echo "\t - w trakcie wywołania metody ".memory_get_usage()."\n";
}
}
echo "\t - przed zainicjowaniem klasy ".memory_get_usage()."\n";
$c = new test();
echo "\t - przed wywołaniem metody ".memory_get_usage()."\n";
$c->metoda();
echo "\t - po wywołaniu metdoy ".memory_get_usage()."\n";
?>[kajoj@shellcode ~]$ php test2.php
Zamowana pamięć:
- przed zadeklarowaniem klasy 60268
- przed zainicjowaniem klasy 60396
- przed wywołaniem metody 10585880
- w trakcie wywołania metody 31635988
- po wywołaniu metdoy 10650420
[kajoj@shellcode ~]$
Roman Piekarski edytował(a) ten post dnia 07.05.09 o godzinie 13:43