#php #gd
#php #gd
Вопрос:
Я выполнил следующий PHP-код:
$a = memory_get_usage();
$b = memory_get_usage(true);
echo $a.' bytes ('.($a/1024/1024).' MB), '.$b.' bytes ('.($b/1024/1024).' MB)<br>';
$img = imagecreatefromjpeg('image.jpg');
$a = memory_get_usage();
$b = memory_get_usage(true);
echo $a.' bytes ('.($a/1024/1024).' MB), '.$b.' bytes ('.($b/1024/1024).' MB)';
Размер изображения 8.8 MB
зависит от разрешения 8185 x 5787
.
Результат был следующим:
396168 bytes (0.37781524658203 MB), 2097152 bytes (2 MB)
190081952 bytes (181.27627563477 MB), 127926272 bytes (122 MB)
Как видно, до загрузки изображения использование памяти PHP / script было только 0.3778.. MB
(или максимальным 2 MB
), но после загрузки изображения 8.8 MB
использование памяти увеличилось в 181 MB
( 181 / 8.8 = 20.57
раз больше, чем изображение)!
Почему PHP использует слишком много памяти, чем загруженное изображение? Понятно, что использовать от 2 до 5 раз, но 20,57 раза не кажется слишком большим?
И еще одна вещь, это то, что документация PHP memory_get_usage([ bool $real_usage = FALSE ] ) : int
говорит об этом параметре:
Если не установлено или FALSE, сообщается только об используемой памяти. Установите для этого значение TRUE, чтобы получить общую память, выделенную из системы, включая неиспользуемые страницы.
Я нахожу это запутанным. В первой строке вывода используемая память является 0.3778 MB
, а общая память, выделенная из системы, равна 2 MB
, что кажется нормальным. Но во второй строке вывода используемая память является 181 MB
, а общая память, выделенная из системы, равна 122 MB
. Как общая память может быть меньше используемой памяти?
Комментарии:
1. Вы можете попробовать ImageMagick вместо GD.
2. @IVOGELOV Спасибо. Я попробовал Imagick (ImageMagick), изменив 5-ю строку кода на
$img = new Imagick('image.jpg');
, и результат показывает: 392128 байт (0,37396240234375 МБ), 2097152 байта (2 МБ) и 392192 байта (0,3740234375 МБ), 2097152 байта (2 МБ) для того же изображения размером 8,8 МБ! Теперь PHP даже не занимает память, эквивалентную изображению, это действительно [image] magic! 😀