2010-02-16 6 views
11

मैं बेहतर काम करने के लिए अपनी स्क्रिप्ट के कचरा कलेक्टर को सक्षम करने की कोशिश कर रहा हूं। स्मृति का एक टन है कि इसे पुनः प्राप्त करने में सक्षम होना चाहिए, लेकिन कुछ इसे रोक रहा है।मैं पर्ल हैश की रेफ गिनती कैसे प्राप्त कर सकता हूं?

मैंने Devel::Cycle थोड़ा सा उपयोग किया है और मुझे मुझे करीब आने की इजाजत है लेकिन मैं काफी नहीं हूं।

मैं पर्ल हैश (मेरी ऑब्जेक्ट्स के लिए स्टोरेज) के लिए वर्तमान संदर्भ गणना कैसे प्राप्त करूं?

क्या किसी ऑब्जेक्ट का संदर्भ रखने वाले व्यक्ति को ट्रैक करने का कोई तरीका है? शायद एक प्रकार का टाई जो कहता है, जब भी कोई व्यक्ति इस वस्तु को इंगित करता है, तो याद रखें कि कोई कौन है।

उत्तर

14

आप Devel::Refcount के लिए देख रहे हैं।

+0

या, मूल में, डेवेल :: पीक :: SvREFCNT – ysth

+0

या नए पेर्ल पर, आंतरिक :: SvREFCNT – ysth

+1

बस 'डेवेल :: रेफकाउंट :: रेफकाउंट' और' डेवेल :: पीक के बीच का अंतर ध्यान रखें: : SvREFCNT'। वे एक जैसे नहीं हैं। [मेरा प्रश्न] देखें (http://stackoverflow.com/questions/11344518/perl-why-do-develrefcountrefcount-and-develpeeksvrefcnt-disagree/11348337) या 'perldoc Devel :: Refcount'। –

6

यदि आप ओएस को अप्रयुक्त स्मृति लौटने के बारे में चिंतित हैं, तो आपको पता होना चाहिए कि सामान्य रूप से यह संभव नहीं है। आपके पर्ल कार्यक्रम की स्मृति पदचिह्न आपके कार्यक्रम के जीवनकाल के दौरान सबसे बड़े आवंटन के समान होगा।

How can I make my Perl program take less memory?Perl FAQ list में Mini-Tutorial: Perl's Memory Management (जैसा टिप्पणियों में @ एवन कैरोल द्वारा इंगित किया गया है) देखें।

+0

बस यह आपका लक्ष्य है, तो gnu malloc के साथ बनाएं। अधिक जानकारी के लिए इस perlmonks पोस्ट [http://www.perlmonks.org/?node_id=803515] देखें। –

संबंधित मुद्दे