我正在試驗SplFixedArray。我有一些工作要處理動態數組,我試圖轉換爲更多的內存有效的固定數組(有限的RAM工作)。SplFixedArray :: fromArray - 本地固定數組的內存效率? PHP 5.3.5
閱讀一些PHP文檔,發現在標題的功能,並着手只是應用於陣列,其是這樣的:
$array[x][y]['field']
(3D陣列與字符串作爲索引,不可能在固定陣列)通過做
$testArray = SplFixedArray::fromArray(generateArray(256));
// generateArray is a function to create the array and set it to zero.
我檢查了是否可以從這個標準數組中獲得一些內存節省。用數字替換字符串索引,使用相同數量的RAM(94 MB)生成陣列。
如果我正確地使用SplFixedArray(而不是從現有的數組轉換)我低內存用於74mb,但我有很多的功能和rutines與基地的3D數組工作,將是一個痛苦的屁股將所有內容轉換爲「適當的」固定數組。這就是爲什麼當我讀到鄰接SPL :: fromArray時,我跳上了我的椅子。但是通過這些測試,我發現了ZERO內存和速度優勢。
我不正確使用它嗎?這個函數只適用於其他類型的東西嗎?
謝謝!
單個256元素陣列根本不足以利用SPLFixedArray更高效的結構。 – Matthew 2011-06-17 05:30:25
SplFixedArray只是在數組鍵上有所節省,而不是在數值上。仍然有很多PHP zval開銷。與普通的PHP數組不同的是,它是一個純索引列表,而不是字典。但速度優勢並沒有實現,因爲這個特性是不穩定的,解釋器對正常的數組/字典進行了優化。 – mario 2011-06-17 05:32:26
見http://matthewturland.com/2010/05/20/new-spl-features-in-php-5-3/ - 答案是:這取決於你在做什麼以及你在那裏得到了多少數據。 SplFixedArray可以顯着提高性能。 – Gordon 2011-06-17 07:51:07