0

私は初心者のPHP開発者であり、この素晴らしい言語を学ぶ過程にあります。これで、1,343,579行で構成されるスクリプトが作成され、これを実行しようとすると、次のようになります。

Fatal error: Out of memory (allocated 269221888) (tried to allocate 536870912 bytes) in Unknown on line 0

異なる検索オプションを考慮した2^9の異なる組み合わせを許可しているため、同じコードを512回繰り返しています。unset()変数をnullにし、場合によっては明示的にを呼び出すことで、メモリリークを最小限に抑えるように最善を尽くしていgc_collect_cycles()ます。

100万行のコードが単にこのメモリの問題を抱えることになるのか、それともメモリ管理に関して愚かなことをしているのかを教えてください。

4

2 に答える 2

1

ソースを小さな部分に分割し、本当に必要なものだけを含めます。同じことを何度も繰り返す場合は、これを別の関数にリファクタリングし、適切なパラメーターで呼び出します。

具体的なタスクがわからないと、これ以上のアドバイスはできません。

条件に応じてクエリ文字列を徐々に作成できます

function execute_query($pdo, $cond1, $cond2, $cond3, ..., $cond9)
{
    $params = array();
    $bind_types = '';
    $sql = 'select * from mytable where';

    $sql = "$sql condition1 = ?";
    $params[] = $cond1;

    if (isset($cond2)) {
        $sql = "$sql and condition2 = ?";
        $params[] = $cond2;
    }

    if (isset($cond3)) {
        $sql = "$sql and condition3 = ?";
        $params[] = $cond3;
    }

    ...

    $sth = $pdo->prepare($sql);
    return $sth->execute($params);
}
于 2012-11-22T10:40:39.190 に答える
0

メモリ リークは正常ではなく、発生するべきではありません。このコードを小さな部分で解体し、構造化するための解決策を試すことができます。

ZEND などの MVC ソリューションを試すことができます。コードが必要以上に何もしないことを確認してください。すべてを見直します。

その上でGl。

于 2012-11-22T10:40:45.637 に答える