Question

J'ai l'habitude de limiter mon utilisation des variables au strict minimum.Je me demande donc s'il y a un avantage à tirer des éléments suivants :

$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();

Maintenant, si j'ai raison, l'exemple 1 devrait être plus efficace car $query est unset quand je le réaffecte, ce qui devrait libérer toute mémoire qui lui est associée.Il existe cependant une méthode (MySQLi_Result::free()) qui libère la mémoire associée - est-ce la même chose ?

Si je n'appelle pas ::free() pour libérer toute mémoire associée au résultat mais unset en réaffectant la variable, est-ce que je fais la même chose ?Je ne sais pas comment enregistrer ce genre de choses. Quelqu'un a-t-il des idées ?

Était-ce utile?

La solution

Le manuel semble suggérer que vous devriez toujours utiliser free() pour libérer la mémoire.Je crois que le raisonnement est le suivant free() libère la mémoire dans MySQL, pas en PHP.Puisque PHP ne peut pas récupérer les données de MySQL, vous devez appeler free().

Autres conseils

Exemple 1 se dissocie la variable $query du résultat MySQL.Le résultat MySQL existe toujours en mémoire et continuera d'exister et de gaspiller de la mémoire jusqu'à ce que le garbage collection se produise.

Exemple 2 libère le résultat MySQL immédiatement, libérant les ressources utilisées.

Cependant, comme les pages PHP sont généralement de courte durée avec de petits jeux de résultats, la mémoire économisée est insignifiante.Vous ne remarquerez aucun ralentissement à moins de partir une tonne des résultats en mémoire sur une longue période sur des pages qui durent longtemps.

Brian, PHP peut garbage collect le résultat MySQL, cela ne se produit tout simplement pas immédiatement.Le résultat réside dans le pool de mémoire de PHP, pas dans celui du serveur MySQL.

(la localité de la mémoire lors de l'utilisation de requêtes sans tampon est légèrement différente, mais elles sont si rarement utilisées en PHP qu'elles ne valent pas la peine d'être mentionnées)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top