2015-02-02 8 views

risposta

8

Tutto viene fuori lo stesso. La sovrascrittura della matrice "vecchia" con QUALSIASI nuova avrebbe causato (eventualmente) la raccolta dei dati inutili e la rimozione dal sistema. Sia che lo si fa in due fasi:

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

o semplicemente

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

fondamentalmente si riduce la stessa cosa: La vecchia serie finirà per ottenere ripulito.

+1

Qualcuno ha fatto un benchmark interessante per vederlo in realtà, che ho trovato per puro caso alla ricerca di 'memory_get_usage' e che ho trovato davvero aperto su questa materia esatta e sulla garbage collection in PHP in un ambito più ampio e può essere trovato qui http://www.tuxradar.com/practicalphp/18/1/11 –

+0

da aspettarsi. la raccolta dei rifiuti è costosa. php non ha intenzione di fare a meno che non debba - ad es. hai richiesto più memoria di quella disponibile nel pool "gratuito" o hai attivato manualmente il sistema GC. –

+0

Ho fatto un rapido Gist https://gist.github.com/AnrietteC/d9245343fe8e856da30e, e sembra che, sebbene l'uso della memoria sia parallelo tra la disattivazione o semplicemente la ripetizione, il tempo di esecuzione è più veloce senza disinserire. Sembra unset() ha davvero un vantaggio solo se non si riutilizza la variabile. –

3

Mentre Marc B's answer è assolutamente corretto, volevo vedere di persona basato sul commento di Daan.

Utilizzando memory_get_usage() ho fatto un test rapido tra il unset() e ridichiarazione. Sia la memoria ugualmente ridotta.

unset()

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

ridichiarazione

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