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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
836
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

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

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

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