windows — использование памяти PHP растет с каждым циклом

У меня есть цикл foreach, который выполняет более 1 миллиона изменений и выполняет несколько тестов и запросов к базе данных. Проблема в том, что когда я отслеживаю использование памяти, она продолжает расти примерно с 500Ко, с этой скоростью она превышает максимальный размер памяти 128М, я использовал unset для своих переменных, но это не работает, я стараюсь не менять максимальную память Размер использования.
Есть идеи, как решить эту проблему?
Кстати, я использую XAMPP 3.2.1 на Windows 7.

Обновление для использования генераторов

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

Решение

Я наконец нашел решение этой проблемы, и это моя плохая причина, потому что я не читал документацию Laravel.

По умолчанию Laravel хранит журнал в памяти всех запросов, которые были выполнены для текущего запроса. Однако в некоторых случаях, например при вставке большого количества строк, это может привести к тому, что приложение будет использовать избыточную память. Чтобы отключить журнал, вы можете использовать метод disableQueryLog

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

Всем спасибо.

1

Другие решения

Вы должны найти причину утечки памяти. Сбросить ваши переменные PHP. Однажды я просочился в цикл, потому что класс базы данных, который я использовал, хранил все запросы, выполненные в массиве, который увеличивался в размере с каждым запросом

0

Вы должны взглянуть на генераторы.
http://php.net/manual/de/language.generators.overview.php

0
По вопросам рекламы [email protected]