DB 添加数据如何实时释放掉内存?
描述:我需要导入大量数据到数据库,通过循环 DB::insert 的方式插入数据,结果执行一段时间就提示内存超出。我检查代码发现。 DB 部分一直没释放内存导致的。
测试:我添加测试内容
Route::get('/test', function () {
for ($i=0; $i<9; $i++) {
\Illuminate\Support\Facades\DB::table('test')->insert(['news_uuid'=>1111111]);
echo "内存:",memory_get_usage(),"\n";
}
});
返回结果:
内存:14310456
内存:14311040
内存:14311624
内存:14312208
内存:14312792
内存:14313376
内存:14313960
内存:14314544
内存:14315448
发现的确是这个部分一直占用内存。
我尝试释放对象:
Route::get('/test', function () {
for ($i=0; $i<9; $i++) {
$db = new \Illuminate\Support\Facades\DB();
$db::table('test')->insert(['news_uuid'=>1111111]);
unset($db);
echo "内存:",memory_get_usage(),"\n";
}
});
返回结果:
内存:14314752
内存:14315336
内存:14315920
内存:14316504
内存:14317088
内存:14317672
内存:14318256
内存:14318840
内存:14319744
依然没有释放内存,我猜想是否是 DB 在其他地方被引用(依赖注入)了没有触发回收机制。
这种情况如何释放内存?
这样试试