内存管理不是大多数PHP开发人员需要考虑的事情。我遇到了一个问题,我的命令行脚本内存不足。它对大量对象执行多次迭代,每次迭代产生多个数据库请求。我确信增加内存上限可能是一个短期解决方案,但我不认为这是一个合适的长期解决方案。我应该做些什么来确保我的脚本没有使用太多内存,并且有效地使用内存?
答案 0 :(得分:37)
当您遇到(或期望遇到)内存压力时,要做的第一件事是:如果您打算按顺序处理它们,请不要一次读取内存中的大量数据。
示例:
file
);相反,一次读一行这并不总是PHP中最方便的事情(数组不会削减它,并且很多代码只适用于数组),但在最近的版本中,特别是在引入generators比以往更容易流式传输数据而不是分块数据。
遵循这种做法,宗教会“自动”为你照顾其他事情:
答案 1 :(得分:2)
您可以尝试对其进行分析,对memory_get_usage()
进行一些调用,以寻找它达到峰值的位置。
当然,了解代码的真正含义,您将获得更多信息来减少其内存使用量。
答案 2 :(得分:1)
计算大量对象时,请尝试不要一次计算所有对象。步行和处理元素,然后走路,然后释放内存并采用下一个元素。
这需要更多时间,但您可以管理您使用的内存量。