php - PHP foreach 超出内存限制

标签 php memory memory-leaks

我正在尝试遍历数组中的数千个项目,执行一些操作并将一些值保存到 mysql 表中。

但是,随着我循环,内存使用量不断增加,直到用完我在 php.ini 中指定的内存,这非常快。

我试过使用 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";
    }
}

这会产生以下结果:

an@email.com
11336688
an@email.com
12043640
an@email.com
12749952

最佳答案

$suscribers 是数据库查询的结果吗?

如果是这样,它可能是您问题的根源:即使您一次浏览一行,这些行也会缓冲在内存中。

您可以尝试使用 unbuffered queries或限制查询结果的数量并执行几个较小的查询。

另请参阅:Why "Allowed memory size exhausted"?

关于php - PHP foreach 超出内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300599/

相关文章:

php - Magento 仅显示至少购买过一次的产品

php - 无法将内容添加到数据库

c - 使用通配符 (*) 作为第一个输入时,程序出现段错误

linux - Linux下的动态内存管理

java - Android:绝对清除 Activity

c++ - 保护应用程序免受库泄漏

php - Div 并非一直在 foreach 循环中申请

php - 如何使循环内的变量在其他地方可用 PHP

apache - Linux循环脚本: Cannot allocate memory

iphone - 内存泄漏 - 应用程序退出并显示信号 9