我在从对象数组中导出大量文件时遇到了内存泄漏问题。
简化后的代码如下:
class Test_Class
{
private $a = null;
public function __construct($a = null)
{
$this->a = $a;
}
public function __destruct()
{
unset($this->a);
}
}
print 'Memory before: '.memory_get_usage(1).' <br>'; // 262 144
$a = [];
for ($i=0; $i<600000; $i++)
$a[] = new Test_Class($i);
print 'Memory after create: '.memory_get_usage(1).' <br>'; // 129 761 280
for($i=0; $i < count($a); $i++)
unset($a[$i]);
unset($a);
print 'Memory after: '.memory_get_usage(1).' <br>'; // 35 389 440
在下一次迭代中,内存仍然会耗尽。
有什么办法来释放被占用的内存吗?
顺便说一句,我尝试使用unset()/赋值为null以及gc_collect_cycles(),但这些方法都无法释放由对象数组占用的内存。