2012-08-06 41 views
10

我測試的SplFixedArray建設有一週的日子的數組,我得到下面的結果:真的SplFixedArray執行比數組更好嗎?

<?php 

$days = new SplFixedArray(7); 

$days[0] = "Monday"; 
$days[1] = "Tuesday"; 
$days[2] = "Wednesday"; 
$days[3] = "Thursday"; 
$days[4] = "Friday"; 
$days[5] = "Saturday"; 
$days[6] = "Sunday"; 

echo memory_get_peak_usage() . "\n"; //Returns 327688 
echo memory_get_usage() . "\n"; //Returns 327140 
echo memory_get_peak_usage(true) . "\n"; //Returns 524288 
echo memory_get_usage(true) . "\n"; //Returns 524288 

與傳統陣列:

<?php 

$days = array(); 

$days[0] = "Monday"; 
$days[1] = "Tuesday"; 
$days[2] = "Wednesday"; 
$days[3] = "Thursday"; 
$days[4] = "Friday"; 
$days[5] = "Saturday"; 
$days[6] = "Sunday"; 

echo memory_get_peak_usage() . "\n"; //Returns 327528 
echo memory_get_usage() . "\n"; //Returns 326820 
echo memory_get_peak_usage(true) . "\n"; //Returns 524288 
echo memory_get_usage(true) . "\n"; //Returns 524288 

它使你的感覺?

+0

你的創建對象和數組...你想要什麼? – voodoo417 2012-08-06 11:53:47

+3

該陣列可能太小而無法體會其差異。嘗試對較大的數組進行基準測試,這就是SplFixedArray無論如何。 – Mahn 2012-08-06 12:12:56

回答

16

如圖所示通過的this article作者進行的基準測試:

http://www.johnciacia.com/wp-content/uploads/2011/01/3.png

人們可以得出結論,SplFixedArray的內存佔用量的確變小,但僅用於大量的明顯的數組元素。因爲SplFixedArray在技術上也是an instance of a class,與傳統數組不同的是,與傳統數組不同的是,如果使用SplFixedArray實現,小數組實際上會消耗更多的內存,但由於這幾百個字節保持不變,因此與大小無關陣列增長。

備註:不要微觀優化,不是每個錘子都是爲每個釘子創建的。 SplFixedArray適用於極端情況,例如對於數十萬個元素的數組,每個元素減少幾個字節的內存使用量會對整個內存使用量產生巨大影響;但不要打擾使用它,除非你確定你的陣列是或可能成爲應用程序的潛在瓶頸。

9

SplFixedArray應該比數組快。它沒有提到任何關於內存消耗的東西(這是你在這裏測試的東西)。從http://www.php.net/splfixedarray

「一個SplFixedArray和正常PHP陣列 之間的主要區別是,SplFixedArray的長度是固定的並且只允許整數 範圍爲指標內的優點在於,它允許更快 數組實現」

然而,使用100000個條目的陣列,顯示它也使用較少的RAM:

$users = array(); 
for ($i=0;$i<100000;$i++) { 
    $users[$i] = array('id' => rand(), 'name' => 'default'); 
} 
echo memory_get_peak_usage(true); //returns 31457280 

$users = new SplFixedArray(100000); 
for ($i=0;$i<100000;$i++) { 
    $users[$i] = array('id' => rand(), 
      'name' => 'default'); 
} 
echo memory_get_peak_usage(true); //return 26738688 
+2

但通常SplFixedArrays確實具有較小的內存佔用量。 – Mahn 2012-08-06 12:29:19

+0

你是對的,我測試了它,並用結果更新了我的答案,很高興知道。 – periklis 2012-08-06 12:58:45