教义查询执行内存问题

奇异的

我正在循环运行一个学说查询,绑定参数并执行多次。查询执行得很好,问题在于每组循环的内存使用量跳升了约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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章