this example देखें (और article मैं सवाल नीचे लिंक):
$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n"; // 120172
echo memory_get_peak_usage() . "<br>\n"; // 121248
$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n"; // 120172
echo memory_get_peak_usage() . "<br>\n"; // 201284
आप देख सकते हैं, एक बिंदु पीएचपी में लगभग दोगुना स्मृति को इस्तेमाल किया था। ऐसा इसलिए है क्योंकि 'x'-string को $x
पर निर्दिष्ट करने से पहले, PHP स्मृति में पिछली चर को पकड़ते समय स्मृति में नई स्ट्रिंग बनाता है। इसे unset
टिंग $x
से रोका जा सकता था।
एक और उदाहरण:
for ($i=0; $i<3; $i++) {
$str = str_repeat("Hello", 10000);
echo memory_get_peak_usage(), PHP_EOL;
}
हो जाएगा ताकि उत्पादन कुछ
तरह
375696
425824
425824
पहले यात्रा $str
पर अभी भी काम करने से पहले खाली है। दूसरे पुनरावृत्ति $str
पर उत्पन्न स्ट्रिंग को हालांकि रखेगा। जब str_repeat
को दूसरी बार बुलाया जाता है, तो यह तुरंत $str
को ओवरराइट नहीं करेगा, लेकिन पहले स्ट्रिंग को स्मृति में असाइन किया जाना है। तो आप $str
के साथ समाप्त हो जाते हैं और यह मान असाइन किया जाना चाहिए। डबल मेमोरी आप $str
अनसेट हैं, तो यह नहीं होगा:
for($i=0;$i<3;$i++) {
$str = str_repeat("Hello", 10000);
echo memory_get_peak_usage(), PHP_EOL;
unset($str);
}
// outputs something like
375904
376016
376016
इससे कोई फर्क पड़ता है? खैर, लिंक किए गए आलेख में
यह महत्वपूर्ण नहीं है, सिवाय इसके कि यह महत्वपूर्ण है।
जब आपको अब उनकी आवश्यकता नहीं होती है तो यह आपके चर को अनसेट करने में कोई दिक्कत नहीं करता है। हो सकता है कि आप एक साझा मेजबान पर हों और बड़े डेटासेट पर कुछ पुनरावृत्ति करना चाहते हैं। अगर परेशान होने से PHP को के साथ समाप्त होने से रोक दिया जाएगा XXXX बाइट्स की स्वीकृत स्मृति आकार समाप्त हो गया है, तो यह छोटे प्रयास के लायक है।
क्या ध्यान में रखा जाना चाहिए, भले ही अनुरोध जीवनकाल केवल एक सेकेंड है, मेमोरी उपयोग को दोगुना करने से प्रभावी ढंग से अधिकतम अनुरोधों की अधिकतम राशि को प्रभावी ढंग से कम किया जा सकता है। यदि आप सर्वर की सीमा के करीब कहीं भी नहीं हैं, तो कौन परवाह करता है, लेकिन यदि आप हैं, तो एक साधारण अनसेट आपको अधिक रैम या अतिरिक्त सर्वर के लिए पैसे बचा सकता है।
* (संबंधित) * http://www.php.net/manual/en/features.gc.refcounting-basics.php और http://blog.preinheimer.com/index.php?/ अभिलेखागार/354-मेमोरी-उपयोग-इन-PHP.html – Gordon
उन लिंक के लिए धन्यवाद। वे उत्कृष्ट स्पष्टीकरण देते हैं। – dd0x