【问题标题】:Is it more efficient to unset an object properties in destructor?在析构函数中取消设置对象属性是否更有效?
【发布时间】:2014-10-12 03:37:43
【问题描述】:

假设一个对象具有大量数据的属性,在析构函数中取消设置属性是否更有效?还是让 php 释放该对象分配的内存?

class A {
    protected $foo;
    protected $bar;
    protected $baz;

    public function __construct()
    {
        $this->foo = big_amount_of_data();
        $this->bar = reference_to_a_big_object();
        $this->foo = data_from_big_file();
    }

    public function doProcess()
    {
        // do something
    }

    public function __destruct()
    {
        // Should I do this?
        unset(
            $this->foo,
            $this->bar,
            $this->baz
        );
    }
}

【问题讨论】:

  • 你有一些示例代码来说明你的意思吗?
  • 显示你当前的工作代码!!!
  • @ClémentMalet,我更新了我的问题
  • @VIVEK-MDU,实际上这就是我正在考虑的,我没有工作代码,但我用示例代码更新了我的问题

标签: php performance destructor


【解决方案1】:

分配 null 比取消设置好。它更快,如果有其他变量引用您正在取消设置的变量,分配 null 实际上会释放内存,而取消设置不会 - 其他变量仍将具有数据而不是 null 值

【讨论】:

    【解决方案2】:

    好吧,简单来说:不,你不应该那样做。

    你最好让 PHP 在你销毁它时对你的对象及其变量做它想做的事情,如果它是关于取消设置变量以取回一些内存。

    1) 您永远无法确定使用 unset 取消设置变量会直接返回已使用的内存。它可能是即时的(但实际上并非如此,它只取决于垃圾收集器何时决定完成他的工作),它可能会在一段时间后或在脚本的最后,这要归功于垃圾收集器。这不是恢复记忆的可靠方法,就是这样。

    2) 变量可访问性不会改变

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多