Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Unset(); nie powoduje zwolnienia zajmowanej pamięci
Forum PHP.pl > Forum > PHP
papryk
  1. <?php
  2. function waste()
  3. {
  4. $data = array();
  5. for($i=0;$i<=70000;$i++){
  6. $data[] = $i;
  7. }
  8.  
  9. $new = array();
  10. foreach($data as $set){
  11. $new[$set] = array(
  12. 'raz',
  13. 'dwa'=>md5(time()),
  14. 'list'=>4000
  15. );
  16. }
  17.  
  18. unset($new);
  19. unset($data);
  20. }
  21.  
  22.  
  23. ini_set('max_execution_time',3600);
  24. for($i=0;$i<40;$i++){
  25. waste();
  26. echo memory_get_usage(true).'<br/>';
  27. }


Powyższy kod działa tak jak zakładałem jednak tylko u mnie na localhoście. Natomiast w środowisku produkcyjnym wartości memory_get_usage(true); są ekstremalnie wysokie. Poniżej prezentuję wartości otrzymane na serwerze: PHP wersja 5.3.26, lokalnie taka sama wersja a wynik maksymalny to 6029312. Nie wiem dlaczego unset(); nie zwalnia pamięci zajmowanej przez te dwie tablice. Ktoś może mnie naprowadzić jak to zdebugować albo dlaczego jest takie duże zużycie?

14942208
28311552
39845888
...
86507520
88342528
92012544
...
97255424
97255424
97255424
...
97779712

przed: 101187584
po: 98041856

ale jak na takie coś to chyba i tak dużo?
em1X
Unset nie służy do zwalniania pamięci tylko do "unsetowania" zmiennych. Odśmiecaniem pamięci zajmuje się garbage collector. Po co w ogóle robisz unset zmiennych na końcu funkcji, one i tak są lokalne i tracą życie z definicji z końcem jej wykonania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.