[英]Doctrine - memory leak with namedQuery execution?
我正在為我的項目使用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);
我在與$query->getSingleScalarResult()
關聯時遇到內存問題。
如果我交換return $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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.