php - 取消设置变量有什么好处?

时间:2011-02-17 14:59:53

标签: php

  

可能重复:
  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;
  }
}

在运行时期间,未设置的变量实际上是否会降低内存消耗?

7 个答案:

答案 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周期, 导致总体执行时间更长。