laravel toArray()方法内存泄露,有没有什么方法解决?

发布于 2022-09-04 18:52:59 字数 682 浏览 45 评论 0

chunk()方法的代码块如下(用Eloquent调用):

 $query->chunk(1000, function ($data) use (&$firstWrite, $fp) {
    Log::info("开始:".memory_get_usage());
    $data = $data->toArray();
    Log::info("结束:".memory_get_usage());
    unset($data);
    Log::info("usnet 结束:".memory_get_usage());
});

日志

从下往上看

Screen Shot 2017-04-01 at 4.16.38 PM.png

通过日志我们可以分析得出:

  • 在将一个“组块”的 Eloquent 模型转为数组的时候$data = $data->toArray();内存增加了很多.最后unset的时候又没有释放回初始值.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

单挑你×的.吻 2022-09-11 18:52:59
DB::table("coupons")->orderBy("id")->chunk(1000, function ($data){
   $data=json_decode(json_encode($data),true);
});

这样就好了

晨曦慕雪 2022-09-11 18:52:59

这个不是内存泄露,unset只是把变量设置为“可回收”而已

世界如花海般美丽 2022-09-11 18:52:59
DB::table("coupons")->orderBy("id")->chunk(1000, function ($data){
       // map 遍历对象
    $data->map(function($item){
        ……    
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文