2012-04-18 3 views
0

Предположим, что многомерный ассоциативный массив, который при печати в виде текста с print_r() создает файл 470 KiB. Можно ли предположить, что рассматриваемая переменная занимает половину памяти сервера MiB для каждого экземпляра, если она различна для каждого пользователя? Поэтому, если 1000 пользователей попадают на сервер, в то же время будет потреблено почти половина гигабайтной памяти?Производительность PHP: переменная памяти

Спасибо.

+0

WTF был тегом "vim" здесь? – ZyX

ответ

5

Существует отличная статья на эту тему в IBM: http://www.ibm.com/developerworks/opensource/library/os-php-v521/

UPDATE

Исходная страница была снесена, на данный момент версия JP-прежнему существует https://www.ibm.com/developerworks/jp/opensource/library/os-php-v521/

Основные вынос образуют его что вы можете использовать memory_get_usage(), чтобы узнать, сколько памяти занимает ваш скрипт:

// This is only an example, the numbers below will differ depending on your system 
echo memory_get_usage() "\ n";. // 36640 
$ A = str_repeat ("Hello", 4242); 
echo memory_get_usage() "\ n";. // 57960 
unset ($ a); 
echo memory_get_usage() "\ n";. // 36744 

Кроме того, вы можете проверить пиковое использование памяти вашего скрипта с помощью memory_get_peak_usage().

В качестве ответа на ваши вопросы: print_r() - это представление данных, раздутых текстом и форматированием. Занимаемая память будет меньше числа символов print_r(). Сколько зависит от данных. Вы должны проверить его, как в приведенном выше примере.

Независимо от того, какой результат вы получите, каждый пользователь будет выполнять сценарий, поэтому да - если 1000 пользователей запрашивают его одновременно, вам понадобится эта память.

+0

Спасибо, это очень актуально. – dotancohen

+1

tl; dr: запустите 'memory_get_usage()', создайте свой массив, а затем запустите 'memory_get_usage()' еще раз и вычтите. –

+0

Связанная статья показывает именно это:) –

Смежные вопросы