mahone 发表于 2010-6-11 16:04:38

php如何手动释放内存

本帖最后由 mahone 于 2010-6-11 16:07 编辑

public function generate_large_data()
{

$arr = array(

'username'=>'jakcy',

'password'=>'123456',

'email'=>'jacky@json.org',

'create_time'=>'');

for ($i=0; $i<100000; $i++)

{

$tmp = $arr;

$tmp['username'] = $tmp['username'].'_'.$i;

$tmp['password'] = $tmp['password'].'_'.$i;

$tmp['email'] = $tmp['email'].'_'.$i;

$tmp['create_time'] = time();

$this->db->insert('test111', $tmp);

$tmp = null;

echo 'insert user = '.$i.'<br/>';

}

}我写了这样一串代码,我的php,memory_limit = 24M
于是在i到7w1左右的时候内存爆了……
Fatal error:Allowed memory size of 25165824 bytes exhausted (tried to allocate 1008 bytes) in E:\code\codeigniter\trunk\src\system\database\drivers\mysql\mysql_driver.php on line 1355
我知道应该是内存没释放,但是不知道怎么释放
注释的地方我用unset释放,不行
我这样释放$tmp = null;,也不行
高手教我,到底该怎么释放内存。

Hex 发表于 2010-6-11 16:28:37

PHP 无法手动释放内存,你 unset 了,也要等 GC 来自动回收,这个不是 C语言, 内存是 PHP 来管理的。
这个只能是加大内存,或者改用其他内存占用小的算法。

mahone 发表于 2010-6-11 17:14:10

回复 2# Hex


   这样啊,好,谢谢,悲剧了……

killbug 发表于 2013-7-10 12:30:53

我有个提议:
如果是处理中间数据,可以先按行写入输出文件,然后再在另外的程序中按行读入处理。
不过,我碰到用ZIP无法读入一个才100M的数据文件进行压缩的问题,不知HEX大有没招?
页: [1]
查看完整版本: php如何手动释放内存