Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP为对象数组清除内存_Php_Arrays_Memory Management - Fatal编程技术网

PHP为对象数组清除内存

PHP为对象数组清除内存,php,arrays,memory-management,Php,Arrays,Memory Management,我有一个类,其中(除其他外)包含从另一个类实例化的对象的简单数组。(此数组很小-仅包含1到4个对象。) 在第一个类的_destruct方法中,我想清除这个对象数组的内容(释放内存)。为此,我是否: 遍历数组,将每个索引设置为null,然后最终将数组设置为null 只需将数组设置为null 如@splash58所述,您可以使用删除变量 unset($array);//也可以用于多个:unset($var1,$var2,…); 取消设置只会销毁变量。正如@splash58所述,您可以使用它删除变量

我有一个类,其中(除其他外)包含从另一个类实例化的对象的简单数组。(此数组很小-仅包含1到4个对象。)

在第一个类的_destruct方法中,我想清除这个对象数组的内容(释放内存)。为此,我是否:

  • 遍历数组,将每个索引设置为null,然后最终将数组设置为null

  • 只需将数组设置为null


  • 如@splash58所述,您可以使用删除变量

    unset($array);//也可以用于多个:unset($var1,$var2,…);
    

    取消设置只会销毁变量。

    正如@splash58所述,您可以使用它删除变量

    unset($array);//也可以用于多个:unset($var1,$var2,…);
    

    取消设置只会销毁变量。

    Re:rjdown链接。谢谢我以前读过那个问题/答案

    从那篇文章中,我得出结论(可能是错误的),在unset($var)和$var=null之间似乎存在2个(可能?)差异

  • 内存实际释放的速度。($var=null似乎更快。)

  • 方法的处理负载。(未设置($var)的负载似乎较少。)

  • 出于各种原因,我决定了内存释放的速度,因此使用了空赋值

    然而,问题仍然存在——数组将为null,但是数组先前包含的对象是否为非null,因此必须等待GC

    因为测试其实很容易,所以我做了

    我为一个父类创建了大约1000个子记录。然后我实例化了一个新的父类,并将1000个子对象加载到数组中

    我在一个测试文件中使用了memory_get_usage(),并进行了大量试验,其中:

  • 父类“\uuu destruct”方法只是取消设置子对象数组

  • 父类“\uuu destruct”方法在数组中迭代,将每个实例设置为null,然后取消设置数组

  • 数据如下:

    • 使用父_u自毁未设置数组
    启动存储器-620288

    父实例和子数组加载后的内存-1316952

    父级之后的内存设置为空-620864

    mem diff=576

    • 使用父_u析构函数迭代数组=null
    启动存储器-620952

    父实例和子数组加载后的内存-1317616

    父级之后的内存设置为空-621528

    mem diff=576

    (我还为父对象创建、子数组加载、父对象销毁设置了一个微时间间隔。2__销毁方法中的每种方法的测试在大约10毫秒时基本上是等效的。)

    从这一点上,我得出结论——这真的没什么区别。未设置或为空,任何使您的船漂浮的内容

    (也许我应该在向论坛发问之前先运行自己的测试。)


    再次感谢。

    Re:rjdown链接。谢谢我以前读过那个问题/答案

    从那篇文章中,我得出结论(可能是错误的),在unset($var)和$var=null之间似乎存在2个(可能?)差异

  • 内存实际释放的速度。($var=null似乎更快。)

  • 方法的处理负载。(未设置($var)的负载似乎较少。)

  • 出于各种原因,我决定了内存释放的速度,因此使用了空赋值

    然而,问题仍然存在——数组将为null,但是数组先前包含的对象是否为非null,因此必须等待GC

    因为测试其实很容易,所以我做了

    我为一个父类创建了大约1000个子记录。然后我实例化了一个新的父类,并将1000个子对象加载到数组中

    我在一个测试文件中使用了memory_get_usage(),并进行了大量试验,其中:

  • 父类“\uuu destruct”方法只是取消设置子对象数组

  • 父类“\uuu destruct”方法在数组中迭代,将每个实例设置为null,然后取消设置数组

  • 数据如下:

    • 使用父_u自毁未设置数组
    启动存储器-620288

    父实例和子数组加载后的内存-1316952

    父级之后的内存设置为空-620864

    mem diff=576

    • 使用父_u析构函数迭代数组=null
    启动存储器-620952

    父实例和子数组加载后的内存-1317616

    父级之后的内存设置为空-621528

    mem diff=576

    (我还为父对象创建、子数组加载、父对象销毁设置了一个微时间间隔。2__销毁方法中的每种方法的测试在大约10毫秒时基本上是等效的。)

    从这一点上,我得出结论——这真的没什么区别。未设置或为空,任何使您的船漂浮的内容

    (也许我应该在向论坛发问之前先运行自己的测试。)

    再次感谢。

    使用
    unset($array)
    Related:但无论哪种方式,都没有理由对数组的各个元素执行此操作。只需将整件事情设置为null/unset即可。使用
    unset($array)
    Related:但无论哪种方式,都没有理由对数组的各个元素执行此操作。只是把整件事都取消了。