PHP中memory_get_usage的用法

在PHP程序中当分配给程序的内存超过php.ini中的memory_limit的设置的时候,会报类似如下的错误。
memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 3201 bytes) in E:\myphp\research\test2.php on line 10

比如下面这个循环中给数组赋值就会出现内存不够用的问题,这是因为数据一直在往数组$data中追加。
$data = array();
for ($i = 0; $i < 100000; $i++) {
    $data[$i] = str_repeat(md5($i), 100);
}

出现这种问题怎么解决呢?
我的思路是,尽可能的在循环中分别对数据进行处理,处理完后释放程序所占的内存空间,而不是把数据追加到数组中。

<?php
set_time_limit(0);
header("Content-type: text/html;charset=utf-8\n");
define('l', "<br />\n");

echo 'memory allocated to PHP 1: ' . memory_get_usage() . ' bytes ' . l;

$data = array();
for ($i = 0; $i < 1000; $i++) {
    $data[$i] = md5($i);
}

echo 'memory allocated to PHP 2: ' . memory_get_usage() . ' bytes ' . l;

unset($data);

echo 'memory allocated to PHP 3: ' . memory_get_usage() . ' bytes ' . l;
?>

输出如下:
memory allocated to PHP 1: 54240 bytes 
memory allocated to PHP 2: 178704 bytes 
memory allocated to PHP 3: 119144 bytes 

分配给php的内存在减少,说明unset在这里是有效的。


上一篇: MySQL中取随机数据的方法
下一篇: PHP中fwrite与file_put_contents性能测试
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: php
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1696
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑