Php 条令-内存泄漏与namedQuery执行?

Php 条令-内存泄漏与namedQuery执行?,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,我在我的项目中使用symfony 3.4和条令。在我为用户生成排名的一个命令中,我在使用namedQuery时遇到了潜在的内存泄漏(尽管我可能错了) 在每个循环迭代(超过2000条记录)中,我运行一个EntityManager->clear()方法以及gc\u collect\u cycles()(只是为了确保正确的垃圾收集)。尽管在10000次迭代之后,内存使用量会跃升到500mB左右,但这确实很奇怪,因为它在使用queryBuilder形成查询的其他命令中正常工作 我已经确保没有其他代码负责

我在我的项目中使用symfony 3.4和条令。在我为用户生成排名的一个命令中,我在使用namedQuery时遇到了潜在的内存泄漏(尽管我可能错了)

在每个循环迭代(超过2000条记录)中,我运行一个
EntityManager->clear()
方法以及
gc\u collect\u cycles()
(只是为了确保正确的垃圾收集)。尽管在10000次迭代之后,内存使用量会跃升到500mB左右,但这确实很奇怪,因为它在使用queryBuilder形成查询的其他命令中正常工作

我已经确保没有其他代码负责这个内存问题,并提取了执行,以便只获取结果并运行命名查询

我还尝试在实体管理器配置中禁用sql logger,但这没有帮助。有人知道怎么回事吗

命名查询
从_类_a中选择总和(a.points),其中a.user=:由a.user组成的用户组
代码有问题的部分(高达~500MB):
$query=$this->createNamedQuery('count_points');
$query->setParameter('user',$user->getId());
$query->setCacheable(false);
返回$query->getSingleScalarResult();
解决方案没有内存泄漏(高达~60-70MB):
$query=$this->createNamedQuery('count_points');
$query->setParameter('user',$user->getId());
$query->setCacheable(false);
//通过条令绕过命名查询执行以节省内存
$sql=$query->getSQL();
$conn=$this->getEntityManager()->getConnection();
$stmt=$conn->prepare($sql);
$stmt->execute([$user->getId()]);
未设置($查询);
return(int)$stmt->fetch(\PDO::fetch\u列);

我在使用
$query->getSingleScalarResult()
时遇到内存问题

如果我交换
返回$query->getSingleScalarResult()

$r = return $query->getResult();
return $r[0]['mysum'];
漏洞消失了。 您必须稍微更改查询并为结果命名:

SELECT SUM(a.points) AS mysum FROM __CLASS__ a WHERE a.user = :user GROUP BY a.user

感谢您的输入-解决方案非常好,以及我发布的示例(使用本机SQL,速度非常快)-尽管我正在尝试找到导致此问题的根本原因。您的解决方案(命名列)对SingleScalarResult也有帮助吗?我最近发现我的漏洞与postgresql DBAL有关。内存中sqlite连接上的单元测试没有重现该问题。然后我将我的生产应用程序切换到mysql,并且在那里,泄漏不会出现。