Сведения о вопросе

None

07:27, 18th August, 2020

Теги

php   mysql   memory   mysqli    

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

Просмотров: 472   Ответов: 2

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

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



  Сведения об ответе

davran

19:22, 2nd August, 2020

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


  Сведения об ответе

lesha

09:24, 11th August, 2020

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

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться