在执行这个简单的代码(对于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);
Run Code Online (Sandbox Code Playgroud)
有没有办法释放数据库查询使用的内存?
我试图将更新查询放在一个函数中,所以在离开函数之后,应该自动释放这个函数使用的资源:
function update($_db) {
$sql = "UPDATE table SET field='value'";
$_db->query($sql);
}
...
for ($i=0; $i<1000; $i++) {
update($_db);
}
Run Code Online (Sandbox Code Playgroud)
但他们不是!
我对像'尝试一次更新多行'这样的建议不感兴趣;)