PHP - 对象解析不释放内存

时间:2016-03-02 09:57:47

标签: php out-of-memory flow

复制(复制)产品时,我的内存不足,而且我遇到了释放内存的问题。我使用框架Flow与Neos。我已经以对象中的析构函数调用其变量的析构函数的方式为对象创建了析构函数。

  • 产品析构函数
    • SuperStructure析构函数
      • 附件析构函数
        • 变体析构函数

销毁后,我想从数据库中检索产品,该数据库不包含固有的对象(根据请求从数据库中提取)。

这是我到目前为止所得到的:

nosetests

示例__desctruct方法 - 产品

$memoryLimit = $this->getMemoryLimit() * 0.5;
$upperMemoryLimit = $this->getMemoryLimit() * 0.6;

$clonedProduct = new Product();

foreach ($product->getSuperStructures() as $superStructure) {
        if (!$superStructure->isSupported()) {
            continue;
        }
        if ($isConverting && !$superStructureType->hasMountingForm($superStructure->getPlatform()->getMountingForm())) {
            continue;
        }
        $clonedSuperStructure = $this->superStructureRepository->copySimple($superStructure);
        $clonedProduct->addSuperStructure($clonedSuperStructure);

        error_log('Memory: ' . memory_get_peak_usage() . ' > ' . $memoryLimit);
        if (memory_get_peak_usage() > $memoryLimit && memory_get_peak_usage() < $upperMemoryLimit) {
            //updateing the product
            $this->update($clonedProduct);
            $this->persistenceManager->persistAll();

            $pid = $clonedProduct->getPid();
            //getting smaller object from db
            error_log('Cloned Product PID: ' . $pid);
            //destructing the old one
            error_log('Memory - before unset: ' . memory_get_peak_usage());
            $clonedProduct->__destruct();
            error_log('Memory - after unset: ' . memory_get_peak_usage());
            $clonedProduct = $this->findByIdentifier($clonedProduct->getPid());
            error_log('Retrived Product PID: ' . $clonedProduct->getPid());
        }
    }

在错误日志中,我看到“unset”之前的内存与之后相同。

有什么想法吗?

非常感谢。

米甲

0 个答案:

没有答案