在执行这个简单的代码(对于 MySQL 数据库)后,每次循环迭代我会减少 1kB 的内存,所以在第 1000 次迭代后,我使用了大约 1MB 的内存。
现在,如果我必须循环运行一个长时间运行的脚本(大约 1 000 000 次迭代),我很快就会内存不足
$_db = Zend_Db_Table::getDefaultAdapter();
$start_memory = memory_get_usage();
for ($i=0; $i<1000; $i++) {
$update_query = "UPDATE table SET field='value'";
$_db->query($update_query);
}
echo 'memory used: '.(memory_get_usage()-$start_memory);
有没有办法释放数据库查询使用的内存?
我试图将更新查询放在一个函数中,因此在离开函数范围后,该函数使用的资源应该被自动释放:
function update($_db) {
$sql = "UPDATE table SET field='value'";
$_db->query($sql);
}
...
for ($i=0; $i<1000; $i++) {
update($_db);
}
但他们不是!
我对“尝试一次更新多行”之类的建议不感兴趣;)