2012-08-06 16 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

+3

अंतर की सराहना करने के लिए सरणी बहुत छोटी है। बड़े सरणी बेंचमार्किंग का प्रयास करें, वैसे भी SplFixedArray वैसे भी है। – Mahn

उत्तर

16

this article के लेखक द्वारा किया जाता मानक द्वारा सचित्र के रूप में:

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

एक निष्कर्ष निकाल सकते हैं कि SplFixedArray की स्मृति पदचिह्न वास्तव में छोटा होता है, लेकिन केवल की एक बड़ी राशि के लिए ध्यान देने योग्य सरणी तत्व। चूंकि SplFixedArray तकनीकी रूप से an instance of a class है, पारंपरिक सरणी के विपरीत, यही कारण है कि छोटे सरणी वास्तव में स्प्लिफिक्स्ड्रे द्वारा कार्यान्वित किए जाने पर अधिक स्मृति उपभोग करने के कारण होती हैं, लेकिन चूंकि बाइट्स के अतिरिक्त कुछ सौ स्थिर रहते हैं, यह आकार के रूप में अप्रासंगिक हो जाता है सरणी बढ़ती है।

साइड नोट: माइक्रो-ऑप्टिमाइज़ न करें, प्रत्येक नाखून के लिए हर हथौड़ा नहीं बनाया जाता है। SplFixedArray चरम मामलों के लिए है, उदा। सैकड़ों हजारों तत्वों के सरणी के लिए, जहां प्रति तत्व स्मृति उपयोग के कुछ बाइट्स काटने से समग्र स्मृति उपयोग पर बड़ा प्रभाव पड़ता है; लेकिन इसका उपयोग तब तक परेशान न करें जब तक आप वास्तव में सुनिश्चित न हों कि आपकी सरणी एप्लिकेशन की संभावित बाधा है या नहीं।

9

एक SplFixedArray सरणी से तेज़ होना चाहिए। यह स्मृति खपत के बारे में कुछ भी नहीं कहता है (जो आप यहां परीक्षण कर रहे हैं)। http://www.php.net/splfixedarray से:।

"एक SplFixedArray और एक सामान्य पीएचपी सरणी के बीच मुख्य अंतर यह है कि SplFixedArray निश्चित लंबाई की है और अनुक्रमित के रूप में सीमा के भीतर केवल पूर्णांकों की अनुमति देता है लाभ यह है कि यह एक तेजी से की अनुमति देता है सरणी कार्यान्वयन "

हालांकि, 100000 प्रविष्टियों की एक सरणी का उपयोग कर, का पता चलता है यह भी कम रैम का उपयोग करता है:

$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

+0

आप सही हैं, मैंने इसका परीक्षण किया और परिणामों के साथ मेरा जवाब अपडेट किया, जानना अच्छा लगा। – periklis