【发布时间】:2010-09-22 18:30:22
【问题描述】:
我正在尝试减少大型循环脚本的内存使用量,所以我做了这个小测试。使用 Doctrine 我运行此代码:
$new_user_entry = getById($new_user_entries[0]['id']);
unset($new_user_entry);
$new_user_entry = getById($new_user_entries[1]['id']);
unset($new_user_entry);
function getById($holding_id)
{
return Doctrine_Core::getTable('UserHoldingTable')->findOneById($holding_id);
}
但是每次我执行 getById 并取消设置时,它都会在内存中留下大约 50 KB 的空间,我不知道为什么或如何更改它。我有一个循环,它会遍历数千个这样的函数以及其他几个函数,这会造成问题。
【问题讨论】:
-
你在 Doctrine 中启用了缓存吗? doctrine-project.org/documentation/manual/1_2/en/…
-
如果默认激活,是的。但我自己还没有打开它。
-
好吧,我的意思是,如果启用缓存,这将解释您的内存泄漏 - Doctrine 仍然会缓存对象,因为您只会释放对它们的引用,而不是 Doctrine 的引用。跨度>
-
只是在黑暗中拍摄,但如果您引用它会有帮助吗?
$new_user_entry =& getById($new_user_entries[0]['id']);。因为您将 getById 的返回值复制到 new_user_entry 变量中,并且只是取消设置,而原始值保留在内存中。不过可能完全错了,这就是为什么我没有发布作为答案;) -
我会在重新访问时尝试这样做。我现在的解决方案是只编写手动查询,以便我可以完全控制加载的内容,现在就像冠军一样工作。