可能重复:
What's better at freeing memory with PHP: unset() or $var = null
在php中取消设置变量有什么好处?
class test {
public function m1($a, $b)
$c = $a + $b;
unset($a, $b);
return $c;
}
}
在运行时期间,未设置的变量实际上是否会降低内存消耗?
答案 0 :(得分:34)
取消设置变量是真的吗? 实际上并没有减少记忆 在运行时消耗?
是的。来自PHP.net:
unset()正如它的名字所说的那样 - 取消设置变量。它不会强制立即释放内存。 PHP的 垃圾收集器会在它做的时候做 尽快看到拟合 - 意图 无论如何都不需要那些CPU周期, 或者直到剧本之前 无论发生什么,都会耗尽内存 第一
如果你正在做$ whatever = null; 然后你正在重写变量 数据。你可能会释放内存/ 缩小速度,但它可能会窃取CPU 从真正需要的代码循环 它们越早,导致时间越长 总体执行时间。
关于你的另一个问题:
有没有理由不设置 除了毁灭之外的变量 会话可变或例如 确定范围?
不是真的,你几乎总结了它。
答案 1 :(得分:5)
PHP将使用垃圾收集器自行清理内存,它通常做得非常好。取消设置只会明确表示你完成了特定的变量。
答案 2 :(得分:3)
对于简单数据类型可能没什么好处,但是对于任何系统资源,您都希望使用该命令来释放这些资源。
答案 3 :(得分:2)
这取决于变量是什么。如果它是一个消耗几兆数据的大型数组,并且您的脚本将来可能需要大量内存(即:在它完成执行之前),那么将此内存标记为可以通过取消设置使用是明智的数组。
也就是说,如果数组仍然在范围内,这只是有用的,因为PHP会有效地自动处理它。
就您提供的示例而言,不需要使用unset,因为这些变量会立即超出范围。
答案 4 :(得分:2)
尽管PHP自己的垃圾收集没有真正的好处,但我偶尔会unset()
变量在代码中明确表示var的角色已经完成且不再被访问或分配。我倾向于不使用原子数据类型,而是使用脚本中的主要角色 - 配置单例,大对象等。
答案 5 :(得分:1)
它释放脚本正在使用的内存。请参阅http://ie2.php.net/memory_get_usage。
这样做的好处在于处理大量数据的脚本可能会导致内存不足错误,请参阅memory_limit ini设置以获取更多信息。
所以,是的,可能会有好处,但除非您正在处理大量数据,否则您不需要使用它。
您可能还想取消设置变量以防止以后使用它们的值,但如果是这种情况,则可能会认为您的代码需要以不同方式编写以防止此类事件发生。
答案 6 :(得分:0)
如未设置
所述unset()正如它的名字所说 - 取消设置一个变量。 它不会强制立即释放内存。 PHP的垃圾收集器会在看到拟合的时候做到这一点 - 很快意图, 因为无论如何都不需要那些CPU周期, 或者在脚本耗尽内存之前,无论先发生什么。 如果你正在做$ whatever = null; 那么你正在重写变量的数据。 你可能会更快地释放/缩小内存, 但它可能会从真正需要它们的代码中窃取CPU周期, 导致总体执行时间更长。