このコードを検討:議論されているスクリプトの場合PHP:メモリを大量に割り当てずに、短い文字列を長い文字列に挿入しますか?
$position = ...
$data = substr($data, 0, $position) . $insertion . substr($data, $position);
通常$data
は大きくない2-3よりMBです。しかし、スクリプトを使用したいユーザーを約17メガバイトのサイズで$data
のためにそれを使用しようとしたことが起こったとライン179は、上に示した第二1($data = ...
)である
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 17687776 bytes) in //index.php on line 179'
、33554432のバイトを得ました= 32 MBおよび17687776> 16 MB。今私は問題がメモリが$data
とsubstr($data, 0, $position)
とsubstr($data, $position)
の両方に割り当てられていると仮定しています。私はthe memory limitを知っていて、それを増やそうと提案しました。しかし、メモリの制限が$data
より2倍以上大きくならないように最適化できるかどうかは疑問です。
私の質問です:メモリ使用量を最小限に抑えるために$insertion
を挿入する巧妙な方法がありますか? ($data
をメモリに2回格納しない)substr($data, $position)
が比較的小さいのはどうですか?
これは確かに、特に(memory_get_peak_usage()を使って)テストする方法に非常に役立ちますが、私はテストのいくつかの議論の結果を得ました。正しい(実際には、私は*なぜ*を探していて、より詳細な画像を得なければならない)。間違いなくupvoted。 – YakovL
ああ、そうですよ! https://3v4l.org/UV3Is - この場合のメモリ消費量は、PHPのバージョンによって異なります(最新のバージョンでは、いくつかの関連する最適化があるかもしれません)。ありがとう、私は答えを編集しました。 – Timurib