2012-08-11 50 views
8

目前我的應用程序使用大約7 MB的內存。巨大的陣列需要更多的內存空間比它應該

如果我用strlen(serialize($array))))檢查它的大小,該陣列似乎使用700 KB。

  • 如果使用這個數組我的應用程序中,並檢查內存使用情況(與memory_get_peak_usage())我得到14 MB。

  • 如果我不使用它,我會得到7 MB。

如果這個數組需要700 KB序列化,爲什麼PHP需要7 MB的這個變量?還是我以錯誤的方式做基準?

+1

這是什麼數組/對象?在內存中表示真實對象可能需要比文本版本更多的分配。 – Brad 2012-08-11 23:32:37

+0

包含所有utf8字符及其ASCII對等字符的表。好的,但是10倍以上? – ellabeauty 2012-08-11 23:33:29

+1

如果使用'memory_get_usage',該怎麼辦? 'memory_get_peak_usage'向你展示'peak'使用情況 – zerkms 2012-08-11 23:36:20

回答

10

如果你困擾你,你想擺脫PHP的束縛:http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html。 PHP陣列就像一些生活空間。

如果可能,您可以使用SplFixedArray,但是再次關心PHP數組佔用的空間。如果你正在尋找乾淨/性能的東西,爲什麼你首先使用PHP(是的,這是來自一個PHP的傢伙):)

+1

@brad tnx!在星期六晚上回答問題時,我需要像你這樣的人:D – PeeHaa 2012-08-11 23:39:05

+0

謝謝我將嘗試將我的數組轉換爲「SplFixedArray」,但需要很長時間:) – ellabeauty 2012-08-11 23:44:25

+2

@Petra,沒問題!現在我們只需要一個StackOverflow喝酒遊戲...... – Brad 2012-08-11 23:46:56

1

序列化格式可以做一些內存優化,因爲他們不需要有對象存在於內存中並且具有完全的可訪問性。他們只保留數據的完整性,而不是可訪問性。如果這有助於回答你的問題一點。