配列内の何千ものアイテムを foreach し、いくつかの操作を行い、いくつかの値を 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