Domanda

Ho l'abitudine di mantenere il mio utilizzo variabile al minimo.Quindi mi chiedo se ci sia qualche vantaggio da ottenere da quanto segue:

$query = $mysqli->query('SELECT * FROM `people` ORDER BY `name` ASC LIMIT 0,30');

// Example 1
$query = $query->fetch_assoc();

// Example 2
$query_r = $query->fetch_assoc();
$query->free();

Ora, se ho ragione, l'esempio 1 dovrebbe essere più efficiente in quanto $query È unset quando lo riassegno, dovrebbe liberare tutta la memoria ad esso associata.Tuttavia esiste un metodo (MySQLi_Result::free()) che libera la memoria associata: è la stessa cosa?

Se non chiamo ::free() per liberare qualsiasi memoria associata al risultato ma unset riassegnando la variabile sto facendo la stessa cosa?Non so come registrare questo genere di cose: qualcuno ha qualche idea?

È stato utile?

Soluzione

IL Manuale sembra suggerire che dovresti ancora usarlo free() per liberare la memoria.Credo che il ragionamento sia questo free() sta liberando la memoria MySQL, non in PHP.Poiché PHP non può effettuare la raccolta dei rifiuti per MySQL, è necessario chiamare free().

Altri suggerimenti

Esempio 1 dissocia la variabile $query dal risultato MySQL.Il risultato MySQL esiste ancora in memoria e continuerà a esistere e a sprecare memoria fino a quando non verrà eseguita la raccolta dei rifiuti.

Esempio 2 libera immediatamente il risultato MySQL, liberando le risorse utilizzate.

Tuttavia, poiché le pagine PHP sono generalmente di breve durata e con piccoli set di risultati, la memoria risparmiata è irrilevante.Non noterai un rallentamento a meno che non esci una tonnellata di risultati in memoria per un lungo periodo di tempo su pagine che funzionano a lungo.

Brian, Php Potere Garbage Collect il risultato MySQL, semplicemente non avviene immediatamente.Il risultato risiede nel pool di memoria di PHP, non in quello del server MySQL.

(la posizione della memoria quando si utilizzano query senza buffer è leggermente diversa, ma sono usate così raramente in PHP da non valere la pena menzionarle)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top