2014-03-03 57 views
2

我写了大量的数据,但在功能内的时间块处理一些PHP脚本。有点像这样:是释放内存当PHP函数结束

function part1(){ 
    $data = getLargeArray(); 
    $evenBigger = array(); 
    foreach($data as $piece){ 
    $evenBigger[$piece['part1']][$piece['part2']][] = ohGodMoreData(); 
    } 

    //...manipulate $evenBigger more and more 

    return true; 
} 

part1(); 

part2(); 
//...etc 

我关心我的函数的内存使用情况。并不是说它们非常麻烦,但我担心如果记忆没有被释放,它可能是。我知道PHP在每个脚本的末尾释放所有的内存,但我也不想运行4或5个不同的脚本。

当我移动到part2();part1();释放的内存?

我是否应该手动取消占用太多空间的变量,如$data$evenBigger,或者相信PHP会在函数结束时为我执行此操作?

或者:

- 有没有更好的方法来放弃那段记忆?

-Any的方式来测试这样的事情?

-Any技巧更好地管理资源?

+1

memory_get_usage()使用它,并且你可以回答你自己的问题 – 2014-03-03 22:14:44

+1

内存不是“释放”的,但是变量所使用的内存只在函数的范围内当函数返回或退出时,为'垃圾收集';'垃圾收集'会在有空闲时钟周期或两个时候释放内存......通常这会很快发生。 –

+1

您可以手动'unset '函数内的变量,但是这只能使它们可用于'垃圾收集' –

回答

0

PHP不指望你来取消所有的变量。

这里您的$evenBigger变量有一个局部范围,除非您将其分配给代码中某处的某个外部引用,您不需要在执行该函数后处理它。

请注意,我不知道到底PHP的内部行为,我不能告诉确切时间,这将是垃圾收集。有关的文档看起来不错http://www.php.net/manual/en/features.gc.php