Использование MySQLi - что лучше для закрытия запросов - PullRequest
2 голосов
/ 25 августа 2008

У меня есть привычка сводить использование переменной к минимуму. Поэтому мне интересно, есть ли какое-либо преимущество, которое можно получить с помощью следующего:

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

Теперь, если я прав, Пример 1 должен быть более эффективным, поскольку $query равен unset, когда я переназначаю его, что должно освободить всю связанную с ним память. Однако есть метод (MySQLi_Result::free()), который освобождает связанную память - это то же самое?

Если я не вызову ::free(), чтобы освободить память, связанную с результатом, но unset, переназначив переменную, я делаю то же самое? Я не знаю, как регистрировать подобные вещи - у кого-нибудь есть идеи?

Ответы [ 2 ]

5 голосов
/ 25 августа 2008

Руководство , похоже, предполагает, что вы все еще должны использовать free() для освобождения памяти. Я считаю, что причина в том, что free() освобождает память в MySQL , а не в PHP. Поскольку PHP не может собирать мусор для MySQL, вам нужно вызвать free().

3 голосов
/ 28 августа 2008

Пример 1 отделяет переменную $ query от результата MySQL. Результат MySQL все еще существует в памяти и будет продолжать существовать и тратить память до тех пор, пока не произойдет сборка мусора.

Пример 2 освобождает результат MySQL немедленно, высвобождая использованные ресурсы.

Однако, поскольку страницы PHP обычно недолговечны с небольшими наборами результатов, сохраненная память тривиальна. Вы не заметите замедления, если не оставите тонну результатов в памяти в течение длительного периода времени на страницах, которые работают в течение длительного времени.

Брайан, PHP может собрать мусор в результате MySQL, просто это происходит не сразу. Результат находится в пуле памяти PHP, а не в сервере MySQL.

(расположение памяти при использовании небуферизованных запросов немного отличается, но они настолько редко используются в PHP, что не стоит упоминать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...