Laravel 拉雷维尔口若悬河地吃掉记忆
为什么每次循环后都要增加我的内存? 我怎样才能释放这个结果Laravel 拉雷维尔口若悬河地吃掉记忆,laravel,memory-leaks,Laravel,Memory Leaks,为什么每次循环后都要增加我的内存? 我怎样才能释放这个结果 我需要得到所有结果,然后将它们合并为业务逻辑流程 下面是不用于显示,所以我不分页他们正常 public function getUser($startId, $endId) { $query = User::where('action', 'register') ->whereBetween('id', [$startId, $endId]) ->whereNotNull('user_
我需要得到所有结果,然后将它们合并为业务逻辑流程 下面是不用于显示,所以我不分页他们正常
public function getUser($startId, $endId)
{
$query = User::where('action', 'register')
->whereBetween('id', [$startId, $endId])
->whereNotNull('user_id');
return $query->get(['users.*']);
}
用户表有大约20k条记录,下面的代码读取每1000条记录
$chunk = 1000;
for ($i = 1; $i <= $count; $i += $chunk) {
$userLists = $this->getUser($i, $i + $chunk);
echo memory_get_usage();//It increase
}
$chunk=1000;
对于($i=1;$i getUser($i,$i+$chunk);
回显内存_get _usage();//它会增加
}
我研究并提出了<代码> d::DababQueLogOrth[](),但仍然要记住内存
。如果需要处理数千个数据库记录,请考虑使用块方法。该方法每次检索结果的一小块,并将每个块放入一个闭包进行处理。如果需要处理数千个数据库记录,请考虑使用块方法。该方法每次检索一个小的结果块,并将每个块放入一个闭包进行处理。
您不能进行分页?为什么要手动生成块?您根本不渴望加载。您可以使用许多辅助方法:例如->with()->limit()->take()->paginate()等我需要获取所有结果,然后将它们合并为流程业务逻辑您能否显示您需要对结果执行的操作,因为可能有更简单/更有效的方法来执行您正在执行的操作。您无法进行分页?为什么要手动生成块?您根本不急于加载。您可以使用许多辅助方法:如->with()->limit()->take()->paginate()我需要获取所有结果,然后将它们合并为流程业务逻辑您可以展示您需要对结果做什么,因为可能有一种更简单/更有效的方法来做您正在做的事情。
DB::table('users')
->where('action', 'register')
->whereBetween('id', [$startId, $endId])
->whereNotNull('user_id')
->chunk(100, function ($users) {
foreach ($users as $user) {
//
}
});