巨大な画像や大きな SQL クエリの結果など、変数が大量のメモリを使用することがわかっている場合は、変数の設定解除を開始することをお勧めします。十分なメモリがありません。またはあなたのウェブサーバー。まだ使用されているメモリのブロックの途中でメモリの小さな部分を解放しても意味がありません。再利用されることはありません。また、メモリを並べ替えると、パフォーマンスが低下します。PHP は、変数の処理に関してかなり最適化されています。
変数の設定を解除すると、その値を指す他の参照がない場合、そのメモリが解放されます。これは配列にも当てはまります。すべての配列キーはその値への参照であり、それらが唯一のキーである場合、配列自体を設定解除すると、内部に格納されているすべての値が設定解除されます。
クエリの結果はすべてメモリに格納されることを知っておく必要があります。直接アクセスすることはできませんが、読み取りたいエントリを指すことができるmysqli_result::data_seek()mysqli_result::fetch_assoc()
のような関数があり、次の呼び出しでそれを取得します。
mysqli_result::free()
実際に結果を配列にコピーしている場合は、クエリ結果を削除するまで ( を明示的に呼び出すか、結果オブジェクトの設定を解除することによって) 、メモリ消費量が少なくとも 2 倍になります。
ただし、 ArrayAccessインターフェイス (およびおそらくIteratorとCountableも)を実装する mysqli_result の周りにラッパーを作成することもできます。これはあなたの配列です-コピーせずに。ランダム値へのアクセスは、最初に を呼び出しseek()
、次にを呼び出し、fetch_assoc()
値を返します。
その後、すべての SPL クラスを自由に利用できます。foreach で実行したときに結果をフィルタリングしたいですか? 独自の FilterIterator を実装し、結果ラッパーを内部に配置するだけです。