2012-08-11 15 views
8

現在、私のアプリは約7 MBのメモリを使用しています。巨大な配列は、それ以上のメモリ容量を必要とする

配列は、私がstrlen(serialize($array))))でそれのサイズをチェックすると700キロバイトを使用して表示されます。私のアプリ内

  • 使用している場合は、この配列、及び(memory_get_peak_usage()で)メモリ使用量をチェックし、私は14メガバイトを取得します。

  • 私はそれを使用しない場合、私は7メガバイトを取得します。

この配列に700 KBのシリアライズが必要な場合、この変数には7 MBが必要ですか?あるいは私は間違った方法でベンチマークをしていますか?

+1

この配列/オブジェクトには何がありますか?メモリ内の真のオブジェクトを表現するには、テキストバージョンに必要なものよりもはるかに多くの割り当てが必要です。 – Brad

+0

すべてのutf8文字とそれに対応するASCIIの表。しかし、10回以上? – ellabeauty

+1

'memory_get_usage'を使うとどうなりますか? 'memory_get_peak_usage'はあなたに'ピーク 'の使用を示します – zerkms

答えて

10

あなたは、これはあなたを気にあれば離れてPHPから操縦したい:http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.htmlを。 PHPの配列はちょっとした居住空間と同じです。

あなたがPHPの配列が必要なもののスペースを気に誰が再度SplFixedArrayを使用していますが、可能性が可能。あなたが最初の場所でPHPを使用しているなぜあなたはクリーン/性能のものを探しているなら(はい、これはPHPの男から来ている):)

+1

@brad tnx! D – PeeHaa

+0

おかげで「SplFixedArray」に私の配列を変換しようI'llが、それは長い時間がかかります:) – ellabeauty

+2

@Petra、問題ありません:土曜の夜の質問に答えるとき、私はあなたのような人が必要です!今すぐStackOverflow飲酒ゲームが必要です。 – Brad

1

彼らはオブジェクトを持っている必要はありませんので、直列化されたフォーマットは、いくつかのメモリの最適化を行うことができますメモリ内に存在し、完全にアクセシビリティを持つようにします。彼らはアクセス可能性ではなく、データの完全性のみを保持します。これが少しあなたの質問に答えるのに役立ちます。

関連する問題