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