TYPO3 Extbase:clearState无法释放内存

问题描述 投票:0回答:1

我有一个用Extbase编写的调度程序的导入作业,并且内存使用率确实很高。在TYPO3 7.6中,我可以使用

释放内存
$this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class)->clearState();

但是升级到TYPO3 9.5后,“ clearState”似乎不像以前那样工作,此功能仅释放了少量内存。

我已经编写了一个简单的示例代码来演示该问题。该示例可以在Extbase控制器中运行,而无需在Scheduler上下文中运行。

var_dump(memory_get_usage());
$v1 = $this->frontendUserRepository->findAll();
foreach($v1 as $vv1) {
    $a1 = $this->frontendUserRepository->findOneByUid($vv1->getUid());
}
var_dump(memory_get_usage());
$this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class)->clearState();
var_dump(memory_get_usage());

输出为int(49013528) int(565877768) int(543894472):通过“ findOneByUid”从数据库中检索用户会消耗大量内存,因为对象存储在某些PHP变量中,并且我希望释放此内存。在TYPO3 7中,它与功能“ clearState”一起使用。

memory typo3 extbase typo3-9.x
1个回答
0
投票
因此,我认为根本就没有用,因为它只是清除我假设使用persistAll()处理的任何堆栈。如果要清除这样的堆栈,为什么要先写呢?也许我缺少该功能的含义,但至少通常它并没有真正删除很多数据。我可能会在扩展程序中使用该函数,如果事实证明某些条件将重置任何准备好的数据库操作,但这对于调度程序任务无济于事,并且应取决于特殊条件,而不是系统地完全删除堆栈。

问题是要删除哪种缓存,here is a list of the cache-API。这里仍然提到Garbage Collection Task,也许正是您想要实现的。

© www.soinside.com 2019 - 2024. All rights reserved.