Pregunta

Tengo la costumbre de mantener el uso de variables al mínimo.Entonces me pregunto si se puede obtener alguna ventaja con lo siguiente:

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

Ahora bien, si estoy en lo cierto, el Ejemplo 1 debería ser más eficiente ya que $query es unset cuando lo reasigno, lo que debería liberar cualquier memoria asociada a él.Sin embargo, existe un método (MySQLi_Result::free()) que libera la memoria asociada: ¿es lo mismo?

si no llamo ::free() para liberar cualquier memoria asociada con el resultado pero unset Al reasignar la variable, ¿estoy haciendo lo mismo?No sé cómo registrar este tipo de cosas. ¿Alguien tiene alguna idea?

¿Fue útil?

Solución

El manual parece sugerir que aún deberías seguir usando free() para liberar la memoria.Creo que el razonamiento es que free() está liberando la memoria en mysql, no en PHP.Dado que PHP no puede realizar la recolección de basura para MySQL, debe llamar free().

Otros consejos

Ejemplo 1 disocia la variable $query del resultado de MySQL.El resultado de MySQL todavía existe en la memoria y seguirá existiendo y desperdiciando memoria hasta que se produzca la recolección de basura.

Ejemplo 2 libera el resultado de MySQL inmediatamente, liberando los recursos utilizados.

Sin embargo, dado que las páginas PHP generalmente son de corta duración y tienen conjuntos de resultados pequeños, la memoria guardada es trivial.No notarás una desaceleración a menos que salgas una tonelada de resultados en la memoria durante un largo período de tiempo en páginas que se ejecutan durante mucho tiempo.

Brian, PHP poder La basura recolecta el resultado de MySQL, simplemente no sucede de inmediato.El resultado se encuentra en el grupo de memoria de PHP, no en el del servidor MySQL.

(la localidad de la memoria cuando se usan consultas sin búfer es ligeramente diferente, pero se usan tan raramente en PHP que no vale la pena mencionarlas)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top