我正在循环运行一个学说查询,绑定参数并执行多次。查询执行得很好,问题在于每组循环的内存使用量跳升了约3mb。似乎垃圾回收没有启动,最终服务器用尽了内存。
foreach () { .....
foreach () { .....
$conn = $this->getEntityManager()->getConnection();
if ($this->sql == null) {
$this->sql = $conn->prepare(
"INSERT INTO table (l_id, a_id) VALUES (:lId, :aId);"
);
}
//Memory usage 200
foreach($lo as $l) {
$this->sql->bindParam('lId', $l->getId());
$this->sql->bindParam('aId', $aId);
$this->sql->execute();
}
//Memory usage ++3mb
}
}
整个脚本也嵌套在一个循环中。因此它将被调用很多次。但是上面的foreach循环似乎是内存增加的地方。
我正在向数据库调用直接插入,因此甚至不使用实体管理器,因为我最初认为这可能会减慢它的速度。
编辑:我试图将bindParam更改为bindValue,但发生相同的问题。将第二个bindParam移出循环;
考虑到在此应用程序中触发的查询数量,通过关闭SQL登录原则,可以解决内存泄漏问题,
$conn = $this->getEntityManager()->getConnection();
$conn->getConfiguration()->setSQLLogger(null);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句