我的代码中有一个foreach
语句,每次迭代都会计算大量数据并进入下一次迭代。我运行此代码,但是当我读取日志时,我发现存在内存泄漏错误。
PHP.net说当发生这种情况时,使用gc_enabled()
是处理此问题的好方法。
我已将这些行添加到foreach
块的最后一行:
echo "Check GC enabled : " . gc_enabled();
echo "Number of affected cycles : " . gc_collect_cycles();
这是输出:
Check GC enabled : 1
Number of affected cycles : 0
为什么存在周期,但受影响的周期为0?
答案 0 :(得分:3)
你有可能没有看到“内存泄漏错误”,你不只是看到那些。你看到的可能是允许的内存耗尽错误,这意味着你的脚本超过了php.ini中定义的允许的最大内存限制。要更改限制,请查看core php.ini directives的手册页。您会在资源限制下找到memory_limit
。
对于gc_collect_cycles()
,函数仍为undocumented,这是一个不使用它的好提示。你读的内容可能是theory behind collecting cycles in PHP。该函数报告的是没有收集任何循环,这可能意味着首先没有内存泄漏错误消息。
我建议你避免在PHP中进行垃圾收集,直到它得到适当的文档记录并了解所涉及的基础知识。