国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

onMessage回調(diào)中實(shí)例化類和靜態(tài)方法內(nèi)存消耗差別怎么這么大?這是為何?

army

為了偷懶想用reload平滑重啟,把控制改為實(shí)例化來(lái)調(diào)用,結(jié)果出現(xiàn)內(nèi)存持續(xù)增長(zhǎng),又改回靜態(tài)方法就正常了,想不明白?

public function onMessage(TcpConnection $c, Request $request): void
{
        .....
        //執(zhí)行控制器
        //$res = $controller::$action($c->army); //調(diào)用靜態(tài)方法內(nèi)存使用正常
         $res = (new $controller)->$action($c->army);//用new實(shí)例化,內(nèi)存持續(xù)增長(zhǎng)
         $c->close($res);
}

class AppHide
{
   //控制器里的方法
    public function appHide($army): Response
    {
        ....
        return $army->res->withBody(Out::json(0, 'ok'));
    }
}

1027 3 1
3個(gè)回答

nitron

試試在$c->close($res)后加上unset($res) ?

  • 暫無(wú)評(píng)論
xiuwang

估計(jì)是控制器實(shí)例沒(méi)釋放,在 __destruct(){} 里加個(gè)日志看下,是不是觸發(fā)了析構(gòu)函數(shù)。

據(jù)我所知, new 的類在以下情況下不會(huì)釋放
1、類的屬性保存了外部的長(zhǎng)周期對(duì)象

class A {
    public $b;
    public function __construct($b)
    {
        // $b是一個(gè)長(zhǎng)周期的對(duì)象,比如$worker
        $this->b = $b;
    }
}

2、類實(shí)例被保存到了靜態(tài)數(shù)組中

class A {
    public static $instance = [];
    public function __construct()
    {
        static::$instance[] = $this;
    }
}
  • army 2023-05-20

    是的,應(yīng)該是沒(méi)有釋放

Gin
$class = 'path\\classname';
if (!isset($instances[$class])) {
$instances[$class] = new $class; // 緩存類實(shí)例,避免重復(fù)初始化
}
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??