2015-02-02 9 views

Odpowiedz

8

Wszystko wychodzi tak samo. Zastąpienie "starej" tablicy NowąKąKą sprawiłoby, że stara tablica (w końcu) dostałaby śmieci zebrane i usunięte z systemu. Czy to zrobić w dwóch etapach:

unset($arr); // force delete old array 
$arr = []; // create new array 

lub po prostu

$arr = []; // replace old array with new empty one 

w zasadzie sprowadza się to samo: Stara tablica ostatecznie się umyć.

+1

Ktoś stworzył interesujący benchmark, aby zobaczyć go w rzeczywistości, który znalazłem przez przypadek szukając "memory_get_usage" i które znalazłem naprawdę otwierające oczy w tej sprawie i na garbage collection w PHP w większym zakresie i można go znaleźć tutaj http://www.tuxradar.com/practicalphp/18/1/11 –

+0

należy się spodziewać. zbieranie śmieci jest kosztowne. php nie zamierza zrobić, chyba że musi - np. zażądałeś więcej pamięci niż jest dostępna w puli "darmowej" lub ręcznie uruchamiasz system GC. –

+0

Zrobiłem szybki Gist https://gist.github.com/AnrietteC/d9245343fe8e856da30e, i wydaje się, że chociaż użycie pamięci jest równoległe między rozbrojeniem lub po prostu redeclaring, czas wykonania jest szybszy bez rozbrojenia. Wydaje się, że unset() naprawdę ma tylko tę zaletę, jeśli nie używasz ponownie zmiennej. –

3

Podczas gdy Marc B's answer jest absolutnie poprawny, chciałem się przekonać na podstawie komentarza Daan.

Korzystanie memory_get_usage() Zrobiłem szybki test między unset() i ponowna. Oba równie zmniejszona pamięć.

unset()

$arr = array_fill(0, 1000000, 'abcdefgh'); // memory: 96613552 
unset($arr);        // memory: 224856 

ponowna

$arr = array_fill(0, 1000000, 'abcdefgh'); // memory: 96613552 
$arr = [];         // memory: 224856