यह भावना नहीं बनाना चाहेंगे वस्तु serializing और स्ट्रिंग लंबाई पढ़ने की कोशिश करने के लिए? जाहिर है इसे बंद धारावाहिक स्ट्रिंग रों होता क्योंकि कई बाइट्स होगा: 'स्ट्रिंग' इसलिए रों: किया जा रहा अतिरिक्त बाइट्स '... जब तक serialize उसी तरह है कि PHP भंडार वस्तुओं हो सकता है' ???
तो उदाहरण
$size = strlen(serialize($object));
बस एक विचार के लिए?
एक और गन्दा लेकिन संभवतः सही सोचा:
एक वर्ग उदाहरण चर के बाद से कई बार चालाकी से किया गया है मान लिया जाये कि इन्स्टेन्शियशन:
$DB; // database access class for eg.
$mem = memory_get_usage();
$DB_tmp = clone $DB;
$mem = memory_get_usage() - $mem;
unset($DB_tmp);
$ मेम स्मृति की सही मात्रा $ डीबी के लिए आवंटित किया जा सकता है ;
function getMemoryUsage($var) {
$mem = memory_get_usage();
$tmp = unserialize(serialize($var));
// Return the unserialized memory usage
return memory_get_usage() - $mem;
}
मैं इसे बेहतर परिणाम की रिपोर्ट है कम से कम, लगता है:
क्या होगा यदि PHP आवंटित की गई स्मृति को मुक्त करने का निर्णय लेता है, बस "गलत समय" पर? मुझे वास्तव में पता नहीं है कि PHP कब स्मृति को मुक्त करता है ("जब आवश्यक हो" की तरह, मुझे लगता है, लेकिन मुझे लगता है कि यह मुक्त करने से कुछ समस्याएं आ सकती हैं? विशेष रूप से कर्कश-संदर्भों के लिए PHP 5.3 द्वारा पेश कचरा कलेक्टर के साथ? –
वैसे हाँ, लेकिन पास्कल के उल्लेख के अलावा, मैं अलग-अलग समय पर इसे अलग-अलग समय में ढूंढने में सक्षम होना चाहता हूं, न केवल आवंटन समय पर। मैं इसे सड़क के नीचे कई लाइनों को ढूंढना चाहता हूं। –
@ पास्कल: PHP स्मृति को मुक्त नहीं करेगा जिसे अभी भी सक्रिय रूप से उपयोग किए जा रहे ऑब्जेक्ट द्वारा संदर्भित किया गया है। चक्रीय संदर्भों का अर्थ है एक संदर्भ बी और बी संदर्भ ए, लेकिन कुछ भी या तो ए या बी संदर्भ नहीं है, इसलिए स्मृति तब तक मुक्त नहीं होगी जब तक कि प्रोग्राम इसे किसी भी तरह से संदर्भित कर सके। –