【发布时间】:2015-02-02 14:46:37
【问题描述】:
在您看来,如果我有一个包含 100 000 个 8 字符字符串条目的数组,那么内存使用情况会更好吗?首先 unset($array) 然后将其重新声明为 $array = []; 或直接重新声明它(@ 987654323@)?
谢谢!
【问题讨论】:
-
当您重新声明数组时,您也会取消设置数组。
标签: php initialization
在您看来,如果我有一个包含 100 000 个 8 字符字符串条目的数组,那么内存使用情况会更好吗?首先 unset($array) 然后将其重新声明为 $array = []; 或直接重新声明它(@ 987654323@)?
谢谢!
【问题讨论】:
标签: php initialization
结果都是一样的。用任何新的东西覆盖“旧”数组会导致旧数组(最终)被垃圾收集并从系统中删除。是否分两个阶段进行:
unset($arr); // force delete old array
$arr = []; // create new array
或者只是
$arr = []; // replace old array with new empty one
基本上归结为同样的事情:旧数组最终会被清理掉。
【讨论】:
memory_get_usage,我发现它确实让我大开眼界,并在更大的 PHP 垃圾收集范围,可以在这里找到tuxradar.com/practicalphp/18/1/11
虽然Marc B's answer 绝对正确,但我想根据Daan 的评论亲眼看看。
使用memory_get_usage() 我在unset() 和重新声明 之间做了一个快速测试。两者都同样减少了内存。
unset()
$arr = array_fill(0, 1000000, 'abcdefgh'); // memory: 96613552
unset($arr); // memory: 224856
重新声明
$arr = array_fill(0, 1000000, 'abcdefgh'); // memory: 96613552
$arr = []; // memory: 224856
【讨论】: