在我的项目中,我正在使用symfony 3.4和理论。在我为用户生成排名的命令之一中,使用namedQuery时遇到了潜在的内存泄漏(尽管我可能错了)。
在每次循环迭代中(超过2000条记录),我都在运行EntityManager->clear()
方法和gc_collect_cycles()
(只是为了确保正确的垃圾收集)。尽管10000次迭代后的内存使用量跃升至500mB左右,但这确实很奇怪,因为它在使用queryBuilder构成查询的其他命令中正常工作。
我确保没有其他代码对此内存问题负责,并将执行提取为获取结果并运行命名查询。
我也尝试在实体管理器配置中禁用sql logger,但这没有帮助。任何人都知道有什么问题吗?
SELECT SUM(a.points) FROM __CLASS__ a WHERE a.user = :user GROUP BY a.user
$query = $this->createNamedQuery('count_points');
$query->setParameter('user', $user->getId());
$query->setCacheable(false);
return $query->getSingleScalarResult();
$query = $this->createNamedQuery('count_points');
$query->setParameter('user', $user->getId());
$query->setCacheable(false);
// bypass named query execution through doctrine for memory saving
$sql = $query->getSQL();
$conn = $this->getEntityManager()->getConnection();
$stmt = $conn->prepare($sql);
$stmt->execute([$user->getId()]);
unset($query);
return (int)$stmt->fetch(\PDO::FETCH_COLUMN);
答案 0 :(得分:0)
我遇到与Failed to load extension
File
~/Desktop/Chrome extension
Error
The 'manifest_version' key must be present and set to 2 (without quotes). See developer.chrome.com/extensions/manifestVersion.html for details.
Could not load manifest.
有关的内存问题。
如果我交换$query->getSingleScalarResult()
,
return $query->getSingleScalarResult();
泄漏消失了。 您必须稍微更改查询并为结果命名:
$r = return $query->getResult();
return $r[0]['mysum'];