Использование MySQLi - что лучше для закрытия запросов

StackOverflow https://stackoverflow.com/questions/26515

  •  09-06-2019
  •  | 
  •  

Вопрос

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

$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 это путем переназначения переменной я делаю то же самое?Я не знаю, как регистрировать подобные вещи - у кого-нибудь есть какие-нибудь идеи?

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top