我正试图在一个数组中遍历数千个项目,执行一些操作并将一些值保存到一个mysql表中。
但是,当我循环使用时,内存使用量会不断增加,直到我在php.in i中指定的内存用完为止,这非常快。
我试过使用unset,将变量设置为null并查看垃圾回收,但没有任何影响。
有没有更有效的方法可以循环这些元素(即内存使用量不会持续增长)。
下面是我正在做的一个简单的例子。

foreach ($subscribers as $subscriber)
{
    $member = new Member($subscriber['id']);
    if ($member['id'] > 0)
    {
        $bulletin = Bulletin::getCustomBulletin($member['id']);

        Bulletin::compileBulletin($member['email'], time(), $bulletin['title'], $bulletin['content']);

        echo $member['email'] . "\n";
        echo memory_get_usage() . "\n";
    }
}

这将产生以下结果:
[email protected]
11336688
[email protected]
12043640
[email protected]
12749952

最佳答案

$suscribers是数据库查询的结果吗?
如果是这样,这可能是问题的根源:行将被缓冲在内存中,即使您一次一行地遍历它们。
您可以尝试使用unbuffered queries或限制查询的结果数并执行几个较小的查询。
另请参见:Why "Allowed memory size exhausted"?

10-06 00:37