Gui*_*dre 17 php memory doctrine symfony1 symfony-1.4
我正在使用Symfony 1.4和Doctrine.
到目前为止,我使用Symfony运行任务没有问题.但是现在我必须导入相当多的数据并将它们保存在数据库中,我才得以臭名昭着
"致命错误:允许的内存大小为XXXX字节耗尽"
在导入过程中,我只创建新对象,设置几个字段并保存它们.
我很确定这与我在保存数据时创建的对象数量有关.但是,取消设置这些对象并没有做任何事情.
是否有任何最佳实践来限制Symfony中的内存使用?
ric*_*age 11
我遇到过这个问题,我发现有几种技术真正有助于Doctrine广泛的内存使用.
1:在可能的情况下,将Doctrine查询结果保存为数组.你可以这样做,例如:
$query = self::createQuery("q")->
...
->setHydrationMode(Doctrine::HYDRATE_ARRAY)
->execute();
Run Code Online (Sandbox Code Playgroud)
这迫使Doctrine不创建大对象,而是将其缩减为数组.显然要记住,如果你这样做,你就失去了调用方法等的能力,所以这只有在你用它来读取字段值等时才有用.
2:执行后释放您的结果.这是在Doctrine文档的一个小区域中记录的,但它确实帮助了我正在使用的导入任务:
$query->free();
Run Code Online (Sandbox Code Playgroud)
而已.您也可以对已创建的对象执行此操作,例如$myObj->free();,这会强制Doctrine删除它创建的所有循环引用.请注意,在通过PHP作用域删除对象时,循环引用会自动从PHP 5.3开始释放unset(),但在此之前您需要自己完成.
在使用它们之后取消设置也会有所帮助,尽管这与free()上面提到的方法结合使用,unset()否则将无法清除循环引用.
| 归档时间: |
|
| 查看次数: |
4995 次 |
| 最近记录: |