Symfony 2 Doctrine内存使用量

3

我正在使用实体仓库创建查询,但似乎存在内存泄漏问题。

在我的实体仓库类中:

echo 'mem 1 : ' . (memory_get_usage()/1024/1024) . "<br />\n";
$query = $this->createQueryBuilder('a')->select('a','b','c','...');
echo 'mem 2 : ' . (memory_get_usage()/1024/1024) . "<br />\n";
$r = $query->getQuery()->getResult();
echo 'mem 3 : ' . (memory_get_usage()/1024/1024) . "<br />\n";
$this->clear(true);
$query->getQuery()->free(true);
unset($r);
echo 'mem 4 : ' . (memory_get_usage()/1024/1024) . "<br />\n";

输出:

内存 1:5.0805282592773
内存 2:5.0998611450195
内存 3:91.49528503418
内存 4:77.939567565918

为什么释放内存后内存没有回到初始大小(5MB),而且只从91降到了77?


如果您也调用unset($query)会怎样? - sroes
刚刚在其他unset旁边添加了unset($query): $this->clear(true); $query->getQuery()->free(true); unset($query); unset($r);但结果相同:mem 4: 77.849983215332 - Seb33300
而结果是什么? - sroes
相同的:mem 4:77.849983215332 - Seb33300
我觉得这与启用调试模式下的 sqllogger 有关。https://dev59.com/1mkw5IYBdhLWcg3ws833#10913115 - Molecular Man
1个回答

5

Doctrine缓存已加载的实体的某些方面。使用

$em->clear(); 

从当前实体管理器中分离所有对象。


随着这个操作,内存降至66 mb(mem 4)。 - Seb33300
3
额外的内存是$r变量导致的。unset()不能保证立即进行垃圾回收,因此进程将保留该内存,直到垃圾回收器释放它或进程终止。详见https://dev59.com/gHRB5IYBdhLWcg3wkH9N。 - james_t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接