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,然后取消设置数组
数据如下:
启动存储器-620288
父实例和子数组加载后的内存-1316952
父级之后的内存设置为空-620864
mem diff=576
启动存储器-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,然后取消设置数组
数据如下:
启动存储器-620288
父实例和子数组加载后的内存-1316952
父级之后的内存设置为空-620864
mem diff=576
启动存储器-620952
父实例和子数组加载后的内存-1317616
父级之后的内存设置为空-621528
mem diff=576
(我还为父对象创建、子数组加载、父对象销毁设置了一个微时间间隔。2__销毁方法中的每种方法的测试在大约10毫秒时基本上是等效的。)
从这一点上,我得出结论——这真的没什么区别。未设置或为空,任何使您的船漂浮的内容
(也许我应该在向论坛发问之前先运行自己的测试。)
再次感谢。使用unset($array)
Related:但无论哪种方式,都没有理由对数组的各个元素执行此操作。只需将整件事情设置为null/unset即可。使用unset($array)
Related:但无论哪种方式,都没有理由对数组的各个元素执行此操作。只是把整件事都取消了。