PHP内存在类结构中泄漏

时间:2014-07-08 12:08:15

标签: php oop memory-leaks iterator

希望有人可以帮我解决这个问题,有点难过。

所以做一些关于图像和多边形的事情,但得到一个奇怪的内存泄漏。

所以我有一个名为canvas的包装类,它只保存我的图像资源,另一个名为polygon,用于管理和操作另一个名为vertices的类,它只是x和y协调器数组的容器。

非常直接。

我注意到我收到内存中断错误,将其跟踪到canvas类上的一个名为getPoly的方法,该方法返回一个多边形实例,在构造上设置顶点类。

如果使用此方法,即使在解除变量后,也不会返回图像资源的内存,但如果您使用new关键字正常创建Polygon实例并将其取消设置就好了。

canvas类还有另一个名为destroy的方法:

imagedestroy($this->canvas);

所以使用这个:

$img  = new Image_Canvas($width, $height);
$poly = $img->getPoly();
$img->destroy();
//Memory not returned

但是

$img  = new Image_Canvas($width, $height);
$poly = new Image_Polygon($width, $height)
$img->destroy();
//Memory is returned

public function getPoly($width= null, $height =null)
{
     if(!is_int($width) || !is_int($height))
     {
        return new Image_Polygon($this->width, $this->height);
     }
     else
     {
        return new Image_Polygon($width, $height);
     }
}  

现在奇怪的是它实际上并不是图像资源问题,问题似乎来自顶点类实现Iterator的事实,如果Vertices没有实现Iterator,那么内存通常以任何方式返回。 Vertices最好实现迭代器以获得有用的循环辅助。

任何帮助或以前的经验都会很棒。

1 个答案:

答案 0 :(得分:0)

原来我是一个白痴并且有一个明显的错误,它将大变量分配给我的代码中的类属性,导致内存泄漏。

良好的编程0,noobery 1