Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
symfony存储库内存泄漏_Symfony_Memory - Fatal编程技术网

symfony存储库内存泄漏

symfony存储库内存泄漏,symfony,memory,Symfony,Memory,trollService.php(Symfony 2.3)中的此代码: N次迭代的$result总是>N-1次迭代。这怎么可能?$trolls变量不是一个局部变量,从函数返回后应该自动删除吗?O.O 那么,如何在下一次迭代之前清除内存呢 原则将已获取的对象保存在内存中:是一种避免过多db查询的方法。 这种机制称为身份映射 这被称为“身份地图”模式,这意味着条令保持一个 每个PHP请求检索到的每个实体和ID的映射 并不断返回相同的实例 还请记住,默认情况下,SQL连接的日志记录设置为 kernel

trollService.php(Symfony 2.3)中的此代码:

N次迭代的$result总是>N-1次迭代。这怎么可能?$trolls变量不是一个局部变量,从函数返回后应该自动删除吗?O.O


那么,如何在下一次迭代之前清除内存呢

原则将已获取的对象保存在内存中:是一种避免过多db查询的方法。

这种机制称为身份映射

这被称为“身份地图”模式,这意味着条令保持一个 每个PHP请求检索到的每个实体和ID的映射 并不断返回相同的实例

还请记住,默认情况下,SQL连接的日志记录设置为
kernel.debug
的值,因此如果将idebug设置为true 对于每次迭代,每个SQL命令都存储在内存中

(来自)

如果要清除内存,必须使用
$this->entityManager->clear()
作为
trolling()函数的最后一条指令

public function trolling()
{
    $repository = $this->entityManager->getRepository('TrollBundle:Troll');
    $trolls = $repository->findAll(); //memory leak
    $this->entityManager->clear(); //here
    return memory_get_usage();
}
public function trolling()
{
    $repository = $this->entityManager->getRepository('TrollBundle:Troll');
    $trolls = $repository->findAll(); //memory leak
    $this->entityManager->clear(); //here
    return memory_get_usage();
}