【发布时间】:2012-06-01 11:38:46
【问题描述】:
在执行这个简单的代码后(对于 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);
}
但他们不是!
我对“尝试一次性更新多行”之类的建议不感兴趣;)
【问题讨论】:
标签: php database zend-framework memory-management