Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Czy stosowanie funkcji unset pomoże zmniejszyć ilość pobieranego RAM-u
Forum PHP.pl > Forum > PHP
jblew
Witam! Tworzę dość spory projekt w php. PHP pracuje tutaj nieprzerwanie (w pętli). Mam następujące pytanie: Czy stosując funkcję unset() np. do wyników pobranych z mysql, czy innych niepotrzebnych danych, pomoże znacząco zmniejszyć ilość pamięci RAM używanej przez PHP. Czy funkcja unset zwalnia zasoby zużywane przez dane?
Crozin
unset usuwa jedynie referencję - zwolnienie pamięci nadal pozostaje w gestii GC-a. Wszystko zależy od tego jaki masz ten kod. Jeżeli dana zmienna i tak jest usuwana przez GC lub nadpisywana to nie ma sensu używać unset(), jeżeli jednak jest ona dostępna przez długi czas można rozważyć jej usunięcie.
Zyx
Jeśli Twój system jest sensownie zrobiony, to te wyniki się same usuną. Nie można bezpośrednio usunąć w PHP żadnej wartości; można co najwyżej usunąć do niej wszystkie referencje itd. i wtedy interpreter sam się zorientuje, że to już jest niepotrzebne. unset() unieważnia referencję, natomiast wartość znika dopiero, gdy liczba odnoszących się do niej referencji spadnie do 0. Problem pojawia się w przypadku tablic i obiektów - jeśli zawierają one referencje cykliczne (np. A zawiera wskazanie do B, zaś B zawiera wskazanie do A), zliczanie referencji nic nie da. PHP potrafi takie cykle rozpoznać dopiero od wersji PHP 5.3, i to w dodatku gdy sobie to włączymy.

unset() nie jest magicznym lekarstwem. W dobrze napisanym skrypcie PHP sam potrafi rozpoznać większość sytuacji, gdy pamięć trzeba zwolnić. Jawna ingerencja jest przydatna głównie przy radzeniu sobie z cyklicznymi referencjami. Zanim zabierzesz się za pracowite zwalnianie pamięci ręcznie, poświęć właśnie chwilę czasu na zrozumienie idei zarządzania pamięcią w tym języku - wtedy będziesz na pewno wiedział, kiedy unset() faktycznie Ci się przyda.
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.