Включить оператор, занимающий 1,5 МБ памяти? - PullRequest
0 голосов
/ 25 июля 2010

Привет, ребята. Я пытаюсь оптимизировать свое приложение здесь и начал сравнивать фрагменты кода с тем, сколько памяти они занимают. Я только что обнаружил, что один оператор включения занимает до 1,5 МБ памяти. Я использую memory_get_usage () для проверки памяти, используемой до adn после фрагмента кода.

Включенный файл включает в себя только один файл, но если я попытаюсь включить этот вложенный включаемый файл самостоятельно, максимальное сокращение составляет всего 768 КБ для одного включения. Файлы здесь очень маленькие, и единственный код в файлах - это определения классов.

Что здесь происходит, это нормально? И как я могу решить эту проблему. Мое приложение размещено на общем хосте, и мне интересно, может ли это быть причиной того, что мое приложение так сильно вымирает.

EDIT:

Вот как я тестирую:

$m = memory_get_usage(true);
include('/...');
$m = memory_get_usage(true)-$m;
echo $m;//over 1.5 MB ?

1 Ответ

2 голосов
/ 25 июля 2010

Это не звучит необычно для меня, особенно если включаемый файл что-то делает.Код PHP интерпретируется на лету, поэтому интерпретатор PHP должен выделить кучу ресурсов, чтобы проанализировать и запустить код в этом файле.1,5 МБ может показаться большим, но интерпретатор PHP, как правило, требует много памяти.В целях проверки вы можете попробовать включить еще один пустой файл и посмотреть, не вызывает ли это увеличение памяти.Вы тестируете другие версии того же самого включаемого файла с различными вещами, чтобы выяснить, является ли это каким-то постоянным увеличением памяти или это зависит от имеющейся функциональности.В любом случае, это не звучит неуместно или необычно для меня.Скорее всего, это всего лишь результат того, что интерпретатор выделил память для чтения включенного файла, создания для него некоторого типа AST и предварительного выделения памяти для всех объектов, значений и переменных в нем.

...