Symfony 2 Doctrine 内存使用

Seb*_*300 3 php memory doctrine symfony

我正在使用实体存储库创建查询,它似乎存在内存泄漏。

在我的实体存储库类中:

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";
Run Code Online (Sandbox Code Playgroud)

输出:

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

为什么释放内存后内存没有恢复到初始大小(5 MB)?

而且只能从 91 传到 77。

jam*_*s_t 5

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

$em->clear(); 
Run Code Online (Sandbox Code Playgroud)

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

  • 额外的内存是 $r 变量的结果。unset() 不保证立即进行垃圾收集,因此进程将保留该内存,直到垃圾收集器释放它或进程终止。有关更多详细信息,请参阅 http://stackoverflow.com/questions/584960/whats-better-at-freeing-memory-with-php-unset-or-var-null。 (3认同)