用户
 找回密码
 入住 CI 中国社区
搜索
查看: 9053|回复: 3
收起左侧

php如何手动释放内存

[复制链接]
发表于 2010-6-11 16:04:38 | 显示全部楼层 |阅读模式
本帖最后由 mahone 于 2010-6-11 16:07 编辑
PHP复制代码
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;,也不行
高手教我,到底该怎么释放内存。
发表于 2010-6-11 16:28:37 | 显示全部楼层
PHP 无法手动释放内存,你 unset 了,也要等 GC 来自动回收,这个不是 C语言, 内存是 PHP 来管理的。
这个只能是加大内存,或者改用其他内存占用小的算法。
 楼主| 发表于 2010-6-11 17:14:10 | 显示全部楼层
回复 2# Hex


   这样啊,好,谢谢,悲剧了……
发表于 2013-7-10 12:30:53 | 显示全部楼层
我有个提议:
如果是处理中间数据,可以先按行写入输出文件,然后再在另外的程序中按行读入处理。
不过,我碰到用ZIP无法读入一个才100M的数据文件进行压缩的问题,不知HEX大有没招?

本版积分规则