たまたま100万回以上の反復を実行し、いくつかのテストとデータベースクエリを実行するforeachループがあります。問題は、メモリ使用量を追跡すると、約500Koで増加し続け、その速度でメモリの最大サイズである128Mを超え、変数に未設定を使用しましたが、機能しません。最大メモリを変更しないように注意しています。使用サイズ。この問題を解決する方法はありますか?ちなみに、私はWindows7でXAMPP3.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);
}
}
私はついにこの問題の解決策を見つけました、そしてそれは私がLaravelのドキュメントを読まなかった私の悪い原因です。
デフォルトでは、Laravelは現在のリクエストに対して実行されたすべてのクエリのログをメモリに保持します。ただし、多数の行を挿入する場合など、場合によっては、アプリケーションが過剰なメモリを使用する可能性があります。ログを無効にするには、disableQueryLogメソッドを使用できます
DB::connection()->disableQueryLog();
みんなありがとう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加