我正在运行一个创建对象的循环(其中创建了一些数组),然后在循环中取消设置:
private function _runLoop($amountPerStep = 4){
$steps = floor(count($this->_symbolRows)/$amountPerStep);
$echo = "";
for($i = 0; $i <= $steps; $i++){
$tempSymbolRows = array_slice($this->_symbolRows,$i*$amountPerStep,($i+1)*$amountPerStep);
if (count($tempSymbolRows) == 0) continue;
$tempSymbols = array();
for($j = 0; $j < count($tempSymbolRows); $j++){
$tempSymbols[] = $tempSymbolRows[$j][0];
}
$scrapping = new Scraping($tempSymbols);
$echo .= "<pre>";
$echo .= "memory_peak_usage / memory_usage <br/>";
$echo .= memory_get_peak_usage()/1000000 ." / ". memory_get_usage() / 1000000 ."<br/><br/>";
//print_r($scrapping->getArrays());
$echo .= "</pre>";
$scrapping = NULL;
unset($scrapping);
gc_collect_cycles();
if( $i >= 3 ) break;
}
echo $echo;
}
在lop中第三次运行后,im打破了循环(测试目的)。我注释掉了打印循环数组的那一行,因为它会因为保存数组用于打印而占用内存(即使对象不存在)。我认为这就是问题所在。但当我运行循环时,我得到了这个输出
memory_peak_usage / memory_usage
7.805928 / 1.530504
memory_peak_usage / memory_usage
9.723464 / 6.28792
memory_peak_usage / memory_usage
39.414088 / 17.227368
memory_peak_usage / memory_usage
55.541584 / 23.166608
所以使用的内存大小越来越大。。。
错误在哪里?
为什么gc没有释放资源?