Symfony 2 Doctrine 内存使用情况
Posted
技术标签:
【中文标题】Symfony 2 Doctrine 内存使用情况【英文标题】:Symfony 2 Doctrine memory usage 【发布时间】:2013-03-06 11:56:11 【问题描述】:我正在使用实体存储库创建查询,它似乎存在内存泄漏。
在我的实体存储库类中:
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
为什么释放内存后内存没有恢复到初始大小(5 MB)?
而且只能从 91 传到 77。
【问题讨论】:
如果你也调用 unset($query) 怎么办? 刚刚在另一个 unset 旁边添加了 unset($query) :$this->clear(true); $query->getQuery()->free(true);未设置($查询);未设置($r);但它是一样的:mem 4:77.849983215332 结果如何? 相同:mem 4:77.849983215332 我认为这与在调试模式下启用 sqllogger ***.com/a/10913115/842075 有关 【参考方案1】:Doctrine 缓存它已加载的实体的某些方面。使用
$em->clear();
从当前实体管理器中分离所有对象。
【讨论】:
这样,内存减少到 66 mb (mem 4)。 额外的内存是 $r 变量的结果。 unset() 不保证立即进行垃圾收集,因此进程将保留该内存,直到垃圾收集器释放它或进程终止。请参阅***.com/questions/584960/… 了解更多详情。以上是关于Symfony 2 Doctrine 内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章
在 Symfony2 中使用 Doctrine 映射异常错误