разрушение объекта не освобождает память

У меня не хватает памяти при копировании (дублировании) Продукта, и у меня возникли проблемы с освобождением памяти. Я использую фреймворк Flow с Neos. Я создал деструкторы для объекта таким образом, что деструктор в объекте вызывает деструктор его переменных.

  • Деструктор продукта
    • Суперструктура деструктор
      • Вспомогательный деструктор
        • Вариант деструктор

После уничтожения я хочу получить продукт из базы данных, которая не содержит встроенных объектов (они выбираются из базы данных по запросу).

Это то, с чем я пришел до сих пор:

$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());
}
}

образец __desctruct метод — Продукт

public  function  __destruct()
{
error_log('destructing product');
$this->picture = null;
$this->defaultInsideDimensions = null;
$this->defaultOutsideDimensions = null;
$this->company = null;
$this->snippet = null;
$this->pdfSnippet = null;
$this->superStructureType = null;
if ($this->superStructures instanceof ArrayCollection) {
foreach ($this->superStructures as $superStructure) {
$superStructure->__destruct();
}
}
error_log('product destructed');
}

В журнале ошибок я вижу, что память до «unset» такая же, как и после.

Есть идеи?

Большое спасибо.

Михал.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]