我做了一个快速而肮脏的测试,image1是85kb image2是457kb
$start = microtime();
for($i=0; $i<10; $i++){
$img = new Imagick('./image1.jpg');
$img->setImageResolution(72,72);
$img->resampleImage(72,72,imagick::FILTER_UNDEFINED,0);
$img->destroy();
$img = new Imagick('./image2.jpg');
$img->setImageResolution(72,72);
$img->resampleImage(72,72,imagick::FILTER_UNDEFINED,0);
$img->destroy();
}
$end = microtime();
$len = $end - $start;
echo number_format($len, 2),'<br /> <br />';
function kb($n){
return ceil($n/1024);
}
echo 'memory usage - ',kb(memory_get_usage()),' / ',kb(memory_get_peak_usage()),' <br />';
然后我注释掉了 destroy 行,然后再次运行它。奇怪的是,它在使用时似乎使用了更多的内存,destroy()
但只有 3 或 4 k。计时器并没有太大的不同,当我运行基本的 apache bench 负载测试时
ab -n 20 -c 5 http://ubunty.local/sandbox/stackexchange/imagick.php
里面好像没有多少。
我期待销毁使用更少的内存。即使在不同的变量中使用 image2 似乎也没有什么不同
$img2 = new Imagick('./image2.jpg');
如果有理由使用 ->destroy() 那么它必须归结为我忘记测量的东西,据我所知。