考试题~来猜猜那个方法占用内存最少。

先凭直想一下,以下三个方法(b1 b2 b3)谁占用内存最少。
并给出为什么?

class a{
    function __construct(){
        echo 'class a __construct'."\n";
    }

    function a1(){
        echo 'a1'."\n";
    }

    function a2(){
        echo 'a2'."\n";
    }

    function a3(){
        echo 'a3'."\n";
    }
}

class b{
    protected $cache;

    function __construct(){
        echo 'class b __construct'."\n";
    }

    function b1($tags='tags'){
        return new a();
    }

    function b2($tags='tags'){
        static $cache=[];
        if(isset($cache[$tags])) return $cache[$tags];
        return $cache[$tags]=new a();
    }

    function b3($tags='tags'){
        if(isset($this->cache[$tags])) return $this->cache[$tags];
        return $this->cache[$tags]=new a();
    }
}

/*内存计算*/
$start = memory_get_usage();
$b=new b();
$b->b1()->a1();
$b->b1()->a2();
$b->b1()->a3();
/*内存计算*/
$end = memory_get_usage();
echo ($end-$start)."\n";

/*内存计算*/
$start = memory_get_usage();
$b=new b();
$b->b2()->a1();
$b->b2()->a2();
$b->b2()->a3();
/*内存计算*/
$end = memory_get_usage();
echo ($end-$start)."\n";

/*内存计算*/
$start = memory_get_usage();
$b=new b();
$b->b3()->a1();
$b->b3()->a2();
$b->b3()->a3();
/*内存计算*/
$end = memory_get_usage();
echo ($end-$start)."\n";
一个菜鸟
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 10

:pensive: 看到这些题,觉得自己就是个搬砖的

2个月前 评论
TimJuly

当然是 b1 占得少了

2个月前 评论
一个菜鸟

@TimJuly 为什么。

2个月前 评论
TimJuly

@一个菜鸟 调用第二个 b1 的时候,第一个 b1 创建出来的 a 就被销毁了啊,就不占内存了啊。

2个月前 评论
一个菜鸟

@TimJuly 666。其实这题还有一个目的,在同一个进程下想减少new的次数,结果画蛇添足了

2个月前 评论

内存占用高,速度就会提高,反之,就速度就会降低,上面那个b1和b2后面应该加一个unset($b), 内存计算才准确吧

2个月前 评论

这应该就是连接数据库的时候为什么推荐使用短链接而不是长链接的原因吧,长连接占用内存高,资源多吧,不即时释放

2个月前 评论
一个菜鸟

@wojianduanfa_sxm_87 内存占用高,速度就会提高。这个想法我居然每想到。 其实就是空间与时间的平衡。

2个月前 评论
lmaster

php 一般多用于网页开发,一个 web 请求一次脚本执行,执行完销毁所有。与其计算内存,不如多考虑 cpu 性能,优化代码。而且多数 php 程序都是非密集计算的,瓶颈大多出现在数据库的 I/O 上面。

2个月前 评论

测试了下

class b __construct
class a __construct
a1
class a __construct
a2
class a __construct
a3
内存88
class b __construct
class a __construct
a1
a2
a3
内存440
class b __construct
class a __construct
a1
a2
a3
内存416
2个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会