我有一个foreach循环,碰巧执行了超过100万次迭代,并进行了一些测试和数据库查询。问题是当我跟踪内存使用情况时,它会以大约500Ko的速度增长,其速率超过128M的内存最大值,我在变量上使用未设置但是不起作用,我注意不要更改最大内存使用规模。 任何想法如何解决这个问题? 顺便说一下,我在Windows 7上使用XAMPP 3.2.1。
更新以使用生成器
public function import()
{
$var = 0;
$filename = 'path';
if (file_exists($filename))
{
if (($handle = fopen($filename, "r")) !== FALSE)
{
foreach ($this->readLines($filename) as $data)
{
if (strpos($data[2], 'string') !== false)
{
// codes and DB queries
}
else
{
if (strpos($data[1], '.png') !== false)
{
// code
}
else
{
if ($data[0] != "")
{
switch($var)
{
case 0:
// code
break;
case 1:
// code
break;
case 2:
// code
break;
case 3:
// code
break;
case 4:
// code
break;
case 5:
// code
break;
}
}
else
{
// code
}
}
}
}
fclose($handle);
return //route;
}
{
return //route;
}
}
else
{
return //route;
}
return //route;
}
我的生成器看起来像:
function readLines($filename)
{
$file= fopen($filename, 'r');
try
{
while (($line= fgetcsv($file, 1024, ",")) !== FALSE)
{
yield $line;
}
}
finally
{
fclose($file);
}
}
答案 0 :(得分:1)
我终于找到了解决这个问题的方法,这是我的错,因为我没有阅读Laravel文档。
默认情况下,Laravel会记录为当前请求运行的所有查询的内存。但是,在某些情况下,例如插入大量行时,这可能会导致应用程序使用过多的内存。要禁用日志,可以使用disableQueryLog方法
DB::connection()->disableQueryLog();
谢谢大家。
答案 1 :(得分:0)
答案 2 :(得分:0)
你必须找到内存泄漏的原因。取消设置你的php变量。我曾经在一个循环中泄露,因为我使用的数据库类存储了在一个数组中执行的所有查询,这个查询随着每个查询的增长而增长