代码之家  ›  专栏  ›  技术社区  ›  gokujou

在大型PHP循环中管理内存的最佳方法是什么?

  •  1
  • gokujou  · 技术社区  · 15 年前

    我有一个脚本,它将通过CRON每晚运行,并将在一个数据库中获取条目并处理它们。我很好奇什么样的方法才是最好的,这样我就不会使用太多的内存/错误或延迟服务器。可能有多达6000个条目需要处理。。。

    我很好奇应该用什么方法来减轻负载,因为我很确定,只要提高内存限制,一旦超过某一点,就会引发其他问题。非常感谢。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Skilldrick    15 年前

    使用数据库游标,您不需要将所有内容都加载到内存中。

    假设你用的是PDO,就这么做吧 PDOStatement->fetch() 对于结果集的每个项。

        2
  •  4
  •   Bill Karwin    15 年前

    我同意@Skilldrick的观点,请确保每次处理一行数据库查询结果。例如,如果您使用MySQL:

    有关详细信息,请参阅文档。

    在使用PDO的原则1.2中,您可以这样做:

    $masterConn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 
    

    注意,当您通过命令行或cron调用PHP时,它没有内存限制。 默认情况下,用于CLI。

        3
  •  0
  •   Aram    15 年前

    如果您将获取每个项目的项目,处理它们,保存并删除未设置的变量,并获取数据的另一部分,则不会占用大量内存。

        4
  •  0
  •   Keyne Viana    15 年前

    您可以对处理的每一行进行计数和标记,以便可以将cron设置为每10分钟一次,例如,每次运行代码时,都可以处理确定数量的行。这样你就永远不会超过时间和记忆的极限。

    您可以首先进行测试,以确定服务器在每次调用脚本时可以接受的最大行数,然后进行设置。