【发布时间】:2012-01-06 21:04:00
【问题描述】:
我有一个递归函数来迭代超过 11M 的数据库记录,一次 1000 条。当它接近 9M 时它停止了。当我在每 1000 条记录后显示 get_memory_usage() 时,我对内存问题的假设得到了证实。
函数的工作原理如下:
<?
get_data_block();
function get_data_block($id=0);
{
//open a csv file for writing
$packages_sorted_csv=fopen("./csv/packages_sorted.csv", "a");
//get 1000 records and process them
//$unsorted = array of 1000 records from database
foreach($unsorted as $row);
{
$ct++;
$id++;
//$packages_sorted = array of processed data
//write output
fputcsv($packages_sorted_csv, $packages_sorted);
}
fclose($packages_sorted_csv);
if($ct==1000)
{
unset($unsorted);
echo 'Mem usage: '.memory_get_usage();
get_data_block($id); //call the function again
}else{
//finished
}
}
?>
有没有人有关于如何使用递归函数释放所有资源的提示? ...或者有没有办法再次调用同一个函数,这样它就不会被自己调用?
注意事项:
- 我必须将数据分块以释放繁忙的 mysql 服务器。
- 我已尝试取消设置不在全局范围内的所有已定义变量。
- 我似乎唯一无法取消设置的是 fopen 资源。
- 每次迭代内存大小增加约 400k。
【问题讨论】:
标签: php memory-management memory-leaks recursion