【发布时间】:2012-05-05 05:57:43
【问题描述】:
我正在尝试遍历数组中的数千个项目,执行一些操作并将一些值保存到 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
【问题讨论】:
-
你的 php.ini 中的内存限制是多少?
-
我已将它从 32MB 移动到 512MB。我目前只在我的本地机器上进行测试。我知道在 php.ini 中做出的任何合理选择都太小了。
-
您是否尝试过将 Member 对象实例化替换为仅返回所需详细信息的静态查找函数?您甚至可以尝试用静态数组替换该行,看看是否还有问题。
-
不要全部加载到数组中($subscribers)。使用unbuffer query 或XMLreaders 进行大数据处理。
标签: php memory memory-leaks