Я только что видел это в сценарии
mysql_free_result($rawdb);
Я где-то видел это в сценарии, он запускал запрос mysql и сохранял результаты в массив, сразу после добавления в массив он запускал то, что, как я предполагаю, освободило память, используемую из запроса mysql.
Я просто прошу проверить, это хорошая идея? У меня есть пара запросов mysql, которые возвращают большой результат, который сохраняется в массиве, следует ли мне запускать этот код после него?
Также в среде, ориентированной на производительность, является ли хорошей практикой отключать большие сеансы и переменные по завершении работы с ними?
6 ответов
Из руководства:
mysql_free_result()
нужно только позвонил, если вы обеспокоены тем, как много памяти используется для запросов которые возвращают большие наборы результатов. Все связанная память результатов автоматически освобождается в конце выполнение скрипта.
Я бы не стал об этом беспокоиться. Все ресурсы результатов освобождаются в конце сценария, и если у вас нет проблем с памятью при выполнении запросов с большими наборами результатов, разница будет незначительной.
Тем не менее, если бы я читал ваш код и увидел mysql_free_result
, я бы точно знал, что вы не собираетесь использовать этот ресурс в дальнейшем в коде, так что это могло бы добавить немного читабельности ...
Я думаю, что это хорошая практика, если вы добавите уровень абстракции данных, так как это делает его хорошим гражданином с обработкой памяти. Тем более, что кода PHP много нет. : - /
Проблема использования памяти была намного хуже в PHP 4, чем в 5, но это все еще может быть проблемой. Если вам необходимо постоянно увеличивать максимальный объем памяти, разрешенный для вашего сценария PHP (по умолчанию это 8 МБ, но в большинстве сред, которые я использую, это до 64 МБ), то вам, вероятно, следует подумать о том, как ваш сценарий использует и чрезмерно использует память. Использование mysql_free_result()
- одна деталь в этом арсенале, но сама по себе бессмысленна. Обработка огромных наборов данных может быть выполнена с гораздо большей эффективностью памяти, если вы используете mysql_unbuffered_query()
и обрабатываете каждую строку по мере ее извлечения с помощью mysql_fetch()
. Я видел, как возможности сценариев для обработки данных значительно возрастают, когда их переписывают с использованием этого подхода.
Этот обсуждается в документации по PHP API. . В зависимости от вашего варианта использования (т. Е. Размера получаемых результатов) mysql_free_result()
может улучшить или снизить производительность. Как говорит комментатор внизу этой ссылки, позвоните memory_get_usage()
, чтобы узнать, следует ли вам освобождать результат или нет. Ничто не сравнится с фактическим изучением использования ваших ресурсов.
Также в среде, ориентированной на производительность, является ли хорошей практикой отключать большие сеансы и переменные по завершении работы с ними?
Обратите внимание: если вы отключите переменные из $_SESSION
, вы фактически удалите их из сеанса: их не будет, когда пользователь в следующий раз вызовет страницу вашего веб-сайта.
Так что вы можете быть осторожны с этой идеей: удаляйте данные из $_SESSION
только тогда, когда они вам больше не нужны.
О unset
данных и / или использовании таких функций, как mysql_free_result
: учитывая, что ваши скрипты (я полагаю, поскольку PHP предназначен для веб-разработки, и пользователи не будут ждать часами загрузки страниц ) работает всего несколько сотен миллисекунд, освобождение памяти таким способом, вероятно, будет излишним: до тех пор, пока вы не получите ошибок, связанных с memory_limit
, вам, вероятно, не стоит беспокоиться.
Страница руководства PHP для функции отвечает на большинство ваших вопросов:
http://us.php.net/manual/en/function.mysql-free-result.php
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.