Php 通过Magento/Zend_Pdf创建100-200k Pdf会导致内存泄漏
请注意 我知道使用另一个PHP Pdf库会更容易,但现在Pdf是来自Magento的修改发票-我需要完整的订单/发票对象,因此请记住,目前除了使用Zend_Pdf之外,没有其他选择Php 通过Magento/Zend_Pdf创建100-200k Pdf会导致内存泄漏,php,magento,pdf,memory-leaks,zend-pdf,Php,Magento,Pdf,Memory Leaks,Zend Pdf,请注意 我知道使用另一个PHP Pdf库会更容易,但现在Pdf是来自Magento的修改发票-我需要完整的订单/发票对象,因此请记住,目前除了使用Zend_Pdf之外,没有其他选择 我已经试了三天了,但似乎Zend\u Pdf通过Zend\u Pdf\u ElementFactory泄漏内存 每次运行此代码时(在foreach循环中运行): 现在我尝试使用unset($pdf) 我还研究了Zend_Pdf类,并构建了一个u析构函数方法,将所有受保护的变量设置为null,并取消它们的设置 经过大
我已经试了三天了,但似乎
Zend\u Pdf
通过Zend\u Pdf\u ElementFactory
泄漏内存
每次运行此代码时(在foreach循环中运行):
现在我尝试使用unset($pdf)
我还研究了Zend_Pdf类,并构建了一个u析构函数方法,将所有受保护的变量设置为null,并取消它们的设置
经过大量调试并使用XGui查看内存使用情况后:
Zend\u Pdf\u ElementFactory
中有一种方法,其目的如下所述:
* PDF element factory.
* Responsibility is to log PDF changes
在第365行中,listModifiedObjects
的公共功能是:
/**
* Enumerate modified objects.
* Returns array of Zend_Pdf_UpdateInfoContainer
*
* @param Zend_Pdf_ElementFactory_Interface $rootFactory
* @return array
*/
public function listModifiedObjects($rootFactory = null)
{
...
foreach ($this->_attachedFactories as $factory) {
$result += $factory->listModifiedObjects($rootFactory);
}
return $result;
}
这个foreach
递归地为每个连接的工厂调用自己。。。我的猜测是我的记忆被浪费在这里的某个地方
如果您有一些线索或指导,告诉我Zend_Pdf_ElementFactory是如何工作的,或者我可以如何清除它(有一个接近的方法,但据我所知,它在任何地方都没有被调用),我将不胜感激
非常感谢您的帮助:-)
PS:如果有什么不清楚的地方,我很乐意提供更多的细节/信息你能提供更多的代码吗?特别是围绕代码所在的foreach循环?当然,我刚刚更新了它!
* PDF element factory.
* Responsibility is to log PDF changes
/**
* Enumerate modified objects.
* Returns array of Zend_Pdf_UpdateInfoContainer
*
* @param Zend_Pdf_ElementFactory_Interface $rootFactory
* @return array
*/
public function listModifiedObjects($rootFactory = null)
{
...
foreach ($this->_attachedFactories as $factory) {
$result += $factory->listModifiedObjects($rootFactory);
}
return $result;
}