Pergunta

Tenho o hábito de manter o uso de variáveis ​​​​no mínimo.Então, estou me perguntando se há alguma vantagem a ser obtida com o seguinte:

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

Agora, se estou certo, o Exemplo 1 deve ser mais eficiente, pois $query é unset quando eu o reatribuo, o que deve liberar qualquer memória associada a ele.No entanto, existe um método (MySQLi_Result::free()) que libera memória associada - é a mesma coisa?

Se eu não ligar ::free() para liberar qualquer memória associada ao resultado, mas unset reatribuindo a variável estou fazendo a mesma coisa?Não sei como registrar esse tipo de coisa - alguém tem alguma ideia?

Foi útil?

Solução

O manual parece sugerir que você ainda deveria estar usando free() para liberar a memória.Acredito que o raciocínio seja esse free() está liberando a memória em MySQL, não em PHP.Como o PHP não pode coletar lixo do MySQL, você precisa chamar free().

Outras dicas

Exemplo 1 dissocia a variável $query do resultado do MySQL.O resultado do MySQL ainda existe na memória e continuará existindo e desperdiçando memória até que ocorra a coleta de lixo.

Exemplo 2 liberta o resultado do MySQL imediatamente, liberando os recursos utilizados.

No entanto, como as páginas PHP geralmente têm vida curta com pequenos conjuntos de resultados, a memória economizada é trivial.Você não notará uma desaceleração a menos que saia uma tonelada de resultados na memória durante um longo período de tempo em páginas que são executadas por um longo período de tempo.

Brian, Php pode colete o resultado do MySQL, isso simplesmente não acontece imediatamente.O resultado reside no pool de memória do PHP, não no servidor MySQL.

(a localidade da memória ao usar consultas sem buffer é um pouco diferente, mas elas são tão raramente usadas em PHP que não vale a pena mencioná-las)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top