PHP没有';t在功能关闭后清除内存使用

PHP没有';t在功能关闭后清除内存使用,php,memory,yii,Php,Memory,Yii,我的项目是关于需要大量数据的postgis。 现在我面对的是记忆枯竭。所以,我试着打印出内存使用情况来检查它,发现在函数结束后内存没有被清除。下面是我如何进行测试的 for($i = 0; $i < count($polyLine); $i++){ echo "BEGIN USE:" .memory_get_usage() . " - PEAK: " . memory_get_peak_usage() . "<br/>"; $orderP

我的项目是关于需要大量数据的postgis。 现在我面对的是记忆枯竭。所以,我试着打印出内存使用情况来检查它,发现在函数结束后内存没有被清除。下面是我如何进行测试的

    for($i = 0; $i < count($polyLine); $i++){
        echo "BEGIN USE:" .memory_get_usage() . " - PEAK: " . memory_get_peak_usage() . "<br/>";
        $orderPolyLine[$i][] = Utils::mergeLinestringsAfterOffset($polyLine[$i], $overlapPaths[$i]->geom);
        echo "AFTER USE:" .memory_get_usage() . " - PEAK: " . memory_get_peak_usage() . "<br/>";
        echo "------------------------- $i -----------------<br/>";
    }
屏幕上的输出如下所示

BEGIN USE:122273264 - PEAK: 122685192
IN FUNCTION USE:127493720 - PEAK: 127802344
AFTER USE:127438320 - PEAK: 127802344
------------------------- 0 -----------------
BEGIN USE:127438320 - PEAK: 127802344
IN FUNCTION USE:185303472 - PEAK: 186612304
AFTER USE:185060120 - PEAK: 186612304
------------------------- 1 -----------------
BEGIN USE:185060120 - PEAK: 186612304
IN FUNCTION USE:211663656 - PEAK: 212287472
AFTER USE:211528488 - PEAK: 212287472
------------------------- 2 -----------------
BEGIN USE:211528488 - PEAK: 212287472
IN FUNCTION USE:214108488 - PEAK: 214419800
AFTER USE:214071624 - PEAK: 214419800
------------------------- 3 -----------------
BEGIN USE:214071624 - PEAK: 214419800
IN FUNCTION USE:236060496 - PEAK: 236967592
AFTER USE:235916176 - PEAK: 236967592
------------------------- 4 -----------------
BEGIN USE:235916176 - PEAK: 236967592
IN FUNCTION USE:238352960 - PEAK: 238708584
AFTER USE:238312440 - PEAK: 238708584
------------------------- 5 -----------------
BEGIN USE:238312440 - PEAK: 238708584

( ! ) Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 438611 bytes) in /Applications/MAMP/htdocs/dlt-gis/vendor/yiisoft/yii/framework/YiiBase.php on line 470
使用后内存应该减少吗?还是我对php有什么误解? 谢谢你的建议

编辑:

我也在循环结束前取消了变量的设置,但是内存仍然耗尽,每个循环中都没有任何减少

    for($i = 0; $i < count($polyLine); $i++){
        echo "BEGIN USE:" .memory_get_usage() . " - PEAK: " . memory_get_peak_usage() . "<br/>";
        $orderPolyLine[$i][] = Utils::mergeLinestringsAfterOffset($polyLine[$i], $overlapPaths[$i]->geom);
        unset($orderPolyLine);
        echo "AFTER USE:" .memory_get_usage() . " - PEAK: " . memory_get_peak_usage() . "<br/>";
        echo "------------------------- $i -----------------<br/>";
    }
for($i=0;$i”;
$orderPolyLine[$i][]=Utils::mergeLinestringsAfterOffset($polyLine[$i],$Overlappath[$i]>geom);
未设置($orderPolyLine);
echo“使用后:”.memory\u get\u usage()。“-PEAK:”.memory\u get\u PEAK\u usage()。“
”; echo“---------------------------$i-----------------
”; }
Utils::mergeLinestringsAfterOffset
作为一个静态变量是没有帮助的,而且如果在每次初始化时不清除其属性、操作和数据,它就会泄漏。您正在对函数输出做一些事情,这可能是内存使用的原因吗?如果您取消设置该索引并调用垃圾收集器,内存使用率是否会下降?@scragar我已经在
取消设置($orderPolyLine)
之前使用
使用后回显
,但内存仍然耗尽,每个循环都没有下降。顺便问一下,如何调用垃圾收集器?感谢you@LozCheroneツ 我也尝试过在同一个文件中将静态函数改为普通函数,它显示了相同的结果,内存耗尽
    for($i = 0; $i < count($polyLine); $i++){
        echo "BEGIN USE:" .memory_get_usage() . " - PEAK: " . memory_get_peak_usage() . "<br/>";
        $orderPolyLine[$i][] = Utils::mergeLinestringsAfterOffset($polyLine[$i], $overlapPaths[$i]->geom);
        unset($orderPolyLine);
        echo "AFTER USE:" .memory_get_usage() . " - PEAK: " . memory_get_peak_usage() . "<br/>";
        echo "------------------------- $i -----------------<br/>";
    }