在PHP脚本中管理内存的最佳实践?
内存管理不是大多数PHP开发人员需要考虑的事情。我遇到了命令行脚本内存不足的问题。它对大量对象执行多次迭代,每次迭代都会发出多个数据库请求。我确信提高内存上限可能是一个短期解决方案,但我不认为这是一个合适的长期解决方案。我应该做些什么来确保我的脚本不会占用太多内存,并有效地使用内存?黄金法则 遇到(或预期会遇到)内存压力时,要做的第一件事是:如果要按顺序处理内存中的大量数据,请不要立即读取它们 示例:在PHP脚本中管理内存的最佳实践?,php,memory-management,Php,Memory Management,内存管理不是大多数PHP开发人员需要考虑的事情。我遇到了命令行脚本内存不足的问题。它对大量对象执行多次迭代,每次迭代都会发出多个数据库请求。我确信提高内存上限可能是一个短期解决方案,但我不认为这是一个合适的长期解决方案。我应该做些什么来确保我的脚本不会占用太多内存,并有效地使用内存?黄金法则 遇到(或预期会遇到)内存压力时,要做的第一件事是:如果要按顺序处理内存中的大量数据,请不要立即读取它们 示例: 不要在内存中获取作为数组的大型结果集;相反,依次获取每一行,并在获取下一行之前对其进行处理
- 不要在内存中获取作为数组的大型结果集;相反,依次获取每一行,并在获取下一行之前对其进行处理
- 不要读取内存中的大型文本文件(例如,使用
文件
);相反,一次读一行
- 不再需要通过关闭资源并故意丢失对它们的所有引用来清理内存占用量大的资源,因为这样的资源就不存在了
- 在处理完大变量后,不再需要取消设置它们,因为也不会有这样的变量
- 小心在循环内创建闭包;这应该很容易做到,因为创建这样的内部循环是一种糟糕的代码味道。始终可以向上提起封口并为其提供更多参数
- 当需要大量输入时,设计您的程序并相应地选择算法。例如,可以使用恒定的内存对任意大小的任意数量的文本文件进行合并排序
这将需要更多的时间,但您可以管理所使用的内存量。您可以尝试对其进行分析,并对其进行一些调用,以查找其达到峰值的位置
当然,了解代码的真正功能,您将获得更多信息以减少其内存使用。基本上-在每次循环后进行清理。可能会显示一些代码?你在这个循环中没有使用匿名函数,是吗?我以前遇到过这个问题……也许,因为你使用CLI,你可以考虑切换语言。还有其他一些语言不仅内存占用更小(这可能会引起激烈的争论),而且可以让您更好地控制内存使用。我无法在这个项目上切换语言,但感谢您的建议。