PHP内存使用量随着每个循环而不断增长

时间:2014-10-13 14:25:44

标签: php windows memory xampp bigdata

我有一个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);
    }
}

3 个答案:

答案 0 :(得分:1)

我终于找到了解决这个问题的方法,这是我的错,因为我没有阅读Laravel文档。

  

默认情况下,Laravel会记录为当前请求运行的所有查询的内存。但是,在某些情况下,例如插入大量行时,这可能会导致应用程序使用过多的内存。要禁用日志,可以使用disableQueryLog方法

DB::connection()->disableQueryLog();

谢谢大家。

答案 1 :(得分:0)

答案 2 :(得分:0)

你必须找到内存泄漏的原因。取消设置你的php变量。我曾经在一个循环中泄露,因为我使用的数据库类存储了在一个数组中执行的所有查询,这个查询随着每个查询的增长而增长